Aracılığıyla paylaş


WPF Genel Bakışında Çift Yönlü Özellikler

Diğer geliştirme platformlarından farklı olarak WPF, aynı belgedeki soldan sağa ve sağdan sola karma veriler gibi çift yönlü içeriğin hızlı geliştirilmesini destekleyen birçok özelliğe sahiptir. Aynı zamanda WPF, Arapça ve İbranice konuşan kullanıcılar gibi çift yönlü özelliklere ihtiyaç duyan kullanıcılar için mükemmel bir deneyim oluşturur.

Aşağıdaki bölümlerde, çift yönlü içeriğin en iyi şekilde görüntülenmesini gösteren örneklerle birlikte birçok çift yönlü özellik açıklanmaktadır. Örneklerin çoğu XAML kullanır, ancak kavramları C# veya Microsoft Visual Basic koduna kolayca uygulayabilirsiniz.

Flowdirection

BIR WPF uygulamasında içerik akışı yönünü tanımlayan temel özelliktir FlowDirection. Bu özellik iki LeftToRightRightToLeftsabit listesi değerinden birine veya olarak ayarlanabilir. özelliği, öğesinden FrameworkElementdevralan tüm WPF öğeleri tarafından kullanılabilir.

Aşağıdaki örnekler bir TextBox öğenin akış yönünü ayarlar.

Soldan sağa akış yönü

<TextBlock Background="DarkBlue" Foreground="LightBlue" 
   FontSize="20" FlowDirection="LeftToRight">
        This is a left-to-right TextBlock
</TextBlock>

Sağdan sola akış yönü

<TextBlock Background="LightBlue" Foreground="DarkBlue"
   FontSize="20" FlowDirection="RightToLeft">
        This is a right-to-left TextBlock
</TextBlock>

Aşağıdaki grafikte, önceki kodun nasıl işlenme şekli gösterilmektedir.

Graphic that illustrates the different flow directions.

Kullanıcı arabirimi (UI) ağacı içindeki bir öğe kapsayıcısından FlowDirection öğesini devralır. Aşağıdaki örnekte , TextBlock içinde yer alan bir WindowiçindedirGrid. FlowDirection için ayarının Window ayarlanması, ve TextBlock için de ayarlanmasını Grid ifade eder.

Aşağıdaki örnekte ayarı FlowDirectiongösterilmektedir.

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="FlowDirectionApp.Window1"
    Title="BidiFeatures" Height="200" Width="700" 
    FlowDirection="RightToLeft">
     
    <Grid>
      <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
      </Grid.ColumnDefinitions>
      <TextBlock Grid.Column="0" >
          This is a right-to-left TextBlock
      </TextBlock>

      <TextBlock Grid.Column="1" FlowDirection="LeftToRight">
          This is a left-to-right TextBlock
      </TextBlock>
    </Grid>
</Window>

Üst düzeyde Window bir RightToLeftFlowDirectionvardır, bu nedenle içindeki tüm öğeler de aynı FlowDirectionöğesini devralır. Bir öğenin belirtilen FlowDirection bir öğeyi geçersiz kılması için, önceki örnekteki olarak değişen ikinci TextBlock gibi açık bir yön değişikliği eklemesi LeftToRightgerekir. Hayır FlowDirection tanımlandığında varsayılan LeftToRight değer uygulanır.

Aşağıdaki grafikte önceki örneğin çıktısı gösterilmektedir:

Graphic that illustrates the explicit flow direction change.

Flowdocument

HTML, Win32 ve Java gibi birçok geliştirme platformu, çift yönlü içerik geliştirme için özel destek sağlar. HTML gibi işaretleme dilleri, içerik yazarlarına gerekli herhangi bir yönde metin görüntülemek için gerekli işaretlemeyi verir; örneğin, "rtl" veya "ltr" değerini değer olarak alan HTML 4.0 etiketi, "dir". Bu etiket özelliğine FlowDirection benzer, ancak FlowDirection özellik metin içeriğinin düzenini sağlamak için daha gelişmiş bir şekilde çalışır ve metin dışındaki içerik için kullanılabilir.

Metin, tablo, resim ve diğer öğelerin birleşimini barındırabilen UI öğesinde. Aşağıdaki bölümlerdeki örnekler bu öğeyi kullanır.

'a FlowDocument metin ekleme işlemi bu şekilde daha fazla yapılabilir. Bunu yapmanın basit bir yolu, Paragraph metin gibi içeriği gruplandırmak için kullanılan blok düzeyinde bir öğedir. Örneklerin kullandığı satır içi düzey öğelere metin eklemek için ve RunkullanınSpan. Span , diğer satır içi öğeleri gruplandırmak için kullanılan satır içi düzey akış içerik öğesiyken, Run biçimlendirilmemiş metin çalıştırmasını içermesi amaçlanan satır içi düzey akış içerik öğesidir. A Span birden çok Run öğe içerebilir.

İlk belge örneği, bir dizi ağ paylaşımı adı içeren bir belge içerir; örneğin \\server1\folder\file.ext, . Bu ağ bağlantısı arapça veya İngilizce belgenizde olsun, her zaman aynı şekilde görünmesini istersiniz. Aşağıdaki grafik, Span öğesinin kullanılmasını gösterir ve arapça RightToLeft bir belgedeki bağlantıyı gösterir:

Graphic that illustrates using the Span element.

Metin olduğundan RightToLeft, "\" gibi tüm özel karakterler metni sağdan sola doğru ayırın. Bu, bağlantının doğru sırada gösterilmemesiyle sonuçlandığı için sorunu çözmek için ayrı Run bir akış LeftToRightkorumak için metnin eklenmiş olması gerekir. Her dil için ayrı Run bir dil kullanmak yerine, sorunu çözmenin daha iyi bir yolu daha az kullanılan İngilizce metni daha büyük bir Arapça Spaniçine eklemektir.

Aşağıdaki grafik, bir Span öğesine katıştırılmış Run öğesini kullanarak bunu gösterir:

Graphic that illustrates the Run element embedded in a Span element.

Aşağıdaki örnekte belgelerde ve Span öğelerinin kullanımı Run gösterilmektedir.

<Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    FlowDirection="RightToLeft">

  <FlowDocument>
    <Paragraph>
      <Span FlowDirection="RightToLeft" >
        ستجد الملف هنا:
        <Run FlowDirection="LeftToRight">
           \\server1\filename\filename1.txt</Run>
        ثم باقى النص!
      </Span>
    </Paragraph>
  </FlowDocument>
</Page>

Span Öğeleri

öğesi, Span farklı akış yönlerine sahip metinler arasında bir sınır ayırıcısı olarak çalışır. Aynı akış yönüne sahip öğelerin bile Span farklı çift yönlü kapsamlara sahip olduğu kabul edilir; bu Span da öğelerin kapsayıcının FlowDirectioniçinde sıralandığı anlamına gelir. Yalnızca öğesindeki SpanFlowDirection içerik öğesinin içinde yer Spanalır.

Aşağıdaki grafikte çeşitli TextBlock öğelerin akış yönü gösterilmektedir.

Graphic that illustrates text blocks with different flow directions.

Aşağıdaki örnekte, önceki grafikte Span gösterilen sonuçları üretmek için ve Run öğelerinin nasıl kullanılacağı gösterilmektedir.

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
  <StackPanel >

    <TextBlock FontSize="20" FlowDirection="RightToLeft">
      <Run FlowDirection="LeftToRight">العالم</Run>
      <Run FlowDirection="LeftToRight" Foreground="Red" >فى سلام</Run>
    </TextBlock>

    <TextBlock FontSize="20" FlowDirection="LeftToRight">
      <Run FlowDirection="RightToLeft">العالم</Run>
      <Run FlowDirection="RightToLeft" Foreground="Red" >فى سلام</Run>
    </TextBlock>

    <TextBlock FontSize="20" Foreground="Blue">العالم فى سلام</TextBlock>

    <Separator/>

    <TextBlock FontSize="20" FlowDirection="RightToLeft">
      <Span Foreground="Red" FlowDirection="LeftToRight">Hello</Span>
      <Span FlowDirection="LeftToRight">World</Span>
    </TextBlock>

    <TextBlock FontSize="20" FlowDirection="LeftToRight">
      <Span Foreground="Red" FlowDirection="RightToLeft">Hello</Span>
      <Span FlowDirection="RightToLeft">World</Span>
    </TextBlock>

    <TextBlock FontSize="20" Foreground="Blue">Hello World</TextBlock>

  </StackPanel>

</Page>

Örnekteki TextBlock öğelerde, Span öğeler üst öğelerininkine FlowDirection göre düzenlenir, ancak her Span öğenin içindeki metin kendi FlowDirectionöğesine göre akar. Bu, Latin ve Arapça veya başka bir dil için geçerlidir.

xml:lang ekleniyor

Aşağıdaki grafikte sayılar ve aritmetik ifadeler kullanan başka bir örnek gösterilmektedir. Örneğin "200.0+21.4=221.4". Yalnızca öğesinin ayarlandığına FlowDirection dikkat edin.

Graphic that displays numbers using only FlowDirection.

Bu uygulamanın kullanıcıları çıkış tarafından hayal kırıklığına uğrayacak, ancak doğru olsa FlowDirection bile sayılar Arapça sayılar şekillendirilmesi gerektiği için şekillendirilmemiştir.

XAML öğeleri, her öğenin dilini tanımlayan bir XML özniteliği (xml:lang) içerebilir. XAML ayrıca ağaçtaki üst öğelere uygulanan değerlerin alt öğeler tarafından kullanıldığı bir XML dil ilkesini xml:lang de destekler. Önceki örnekte, bir dil öğe veya en üst düzey öğelerinden herhangi biri için Run tanımlanmadığından, varsayılan xml:lang değer XAML için kullanılırdı en-US . Windows Presentation Foundation'ın (WPF) iç sayı şekillendirme algoritması, karşılık gelen dilde (bu örnekte İngilizce) sayıları seçer. Arapça sayıların doğru şekilde xml:lang işlenmesi için ayarlanması gerekir.

Aşağıdaki grafikte eklenen örnek xml:lang gösterilmektedir.

Graphic that illustrates Arabic numbers that flow from right to left.

Aşağıdaki örnek uygulamaya ekler xml:lang .

<Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    FlowDirection="RightToLeft">
      <FlowDocument>
         <Paragraph>
            <Span FlowDirection="RightToLeft" Language="ar-SA">
              العملية الحسابية: "200.0+21.4=221.4"
            </Span>
         </Paragraph>
      </FlowDocument>
</Page>

Hedeflenen "ar-SA" bölgeye bağlı olarak birçok dilin farklı xml:lang değerlere sahip olduğunu ve "ar-EG" arapçanın iki varyasyonunu temsil ettiğini unutmayın. Önceki örneklerde hem hem FlowDirection de xml:lang değerlerini tanımlamanız gerektiği gösterilmiştir.

Metin Olmayan Öğelerle FlowDirection

FlowDirection yalnızca metin öğesinde metnin nasıl aktığını değil, neredeyse diğer tüm ui öğelerinin akış yönünü de tanımlar. Aşağıdaki grafikte, arka planını soldan sağa gradyanla çizmek için yatay LinearGradientBrush kullanan bir gösterilmektedirToolBar.

Graphic that shows a toolbar with a left to right gradient.

olarak ayarlandıktan FlowDirectionRightToLeftsonra, yalnızca ToolBar düğmeler sağdan sola düzenlenir, aynı zamanda uzaklıkları sağdan LinearGradientBrush sola doğru akacak şekilde yeniden hizalar.

Aşağıdaki grafikte öğesinin yeniden hizalanması gösterilmektedir LinearGradientBrush.

Graphic that shows a toolbar with a right to left gradient.

Aşağıdaki örnek bir RightToLeftToolBarçizer. (Soldan sağa çizmek için özniteliğini FlowDirectionToolBarüzerinde kaldırın.

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  
  <ToolBar FlowDirection="RightToLeft" Height="50" DockPanel.Dock="Top">
    <ToolBar.Background>
      <LinearGradientBrush StartPoint="0,0.5" EndPoint="1,1">
        <LinearGradientBrush.GradientStops>
          <GradientStop Color="DarkRed" Offset="0" />
          <GradientStop Color="DarkBlue" Offset="0.3" />
          <GradientStop Color="LightBlue" Offset="0.6" />
          <GradientStop Color="White" Offset="1" />
        </LinearGradientBrush.GradientStops>
      </LinearGradientBrush>
    </ToolBar.Background>

    <Button FontSize="12" Foreground="White">Button1</Button>
    <Rectangle Width="20"/>
    <Button FontSize="12" Foreground="White">Button2</Button>
    <Rectangle Width="20"/>
    <Button FontSize="12" Foreground="White">Button3</Button>
    <Rectangle Width="20"/>
    <Button FontSize="12" Foreground="White">Button4</Button>
    <Rectangle Width="20"/>
  </ToolBar>
</Page>

FlowDirection Özel Durumları

Beklendiği gibi davranmayan birkaç durum FlowDirection vardır. Bu bölüm, bu özel durumların ikisini kapsar.

Image

, Image görüntü görüntüleyen bir denetimi temsil eder. XAML'de, görüntülenecek öğesinin tekdüzen kaynak tanımlayıcısını (URI) Image tanımlayan bir Source özellik ile kullanılabilir.

Diğer kullanıcı arabirimi öğelerinin aksine , Image kapsayıcıdan öğesini devralmaz FlowDirection . Ancak, açıkça olarak olarak ayarlanırsa FlowDirectionRightToLeft, bir Image yatay olarak çevrilmiş olarak görüntülenir. Bu, çift yönlü içerik geliştiricileri için kullanışlı bir özellik olarak uygulanır; çünkü bazı durumlarda, görüntüyü yatay olarak çevirmek istenen efekti üretir.

Aşağıdaki grafikte çevrilmiş bir gösterilmektedir Image.

Graphic that illustrates a flipped image.

Aşağıdaki örnek, öğesinin Image öğesini içeren öğesinden StackPanel devralamadığını FlowDirection gösterir.

Dekont

Bu örneği çalıştırmak için C:\ sürücünüzde ms_logo.jpg adlı bir dosyanız olmalıdır.

<StackPanel 
  xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' 
  FlowDirection="RightToLeft">

  <Image Source="file://c:/ms_logo.jpg" 
         Width="147" Height="50"/>
  <Separator Height="10"/>
  <Image Source="file://c:/ms_logo.jpg" 
         Width="147" Height="50" FlowDirection="LeftToRight" />
  <Separator Height="10"/>
  <Image Source="file://c:/ms_logo.jpg" 
         Width="147" Height="50" FlowDirection="RightToLeft"/>
</StackPanel>

Dekont

İndirme dosyalarına bir ms_logo.jpg dosyası dahildir. Kod, .jpg dosyasının projenizde değil, C:\ sürücüsünde bir yerde olduğunu varsayar. Proje dosyalarındaki .jpg dosyasını C:\ sürücünüze kopyalamanız veya kodu projenin içinde aramak için değiştirmeniz gerekir. Bu değişikliği yapmak için olarak Source="ms_logo.jpg"değiştirinSource="file://c:/ms_logo.jpg".

Yol

bir Imageek olarak, başka bir ilginç öğedir Path. Yol, bir dizi bağlı çizgi ve eğri çizebilen bir nesnedir. Ile ilgili olarak benzer Image şekilde davranır; örneğinFlowDirectionRightToLeft, onun yatay bir aynasıdırLeftToRight.FlowDirection Ancak, bir Image'den farklı olarak kapsayıcıdan Path devralır FlowDirection ve açıkça belirtilmesi gerekmez.

Aşağıdaki örnek 3 satır kullanarak basit bir ok çizer. İlk ok akış yönünü öğesinden StackPanel devralırRightToLeft, böylece başlangıç ve bitiş noktaları sağ taraftaki bir kökten ölçülür. Açık RightToLeftFlowDirection olan ikinci ok da sağ tarafta başlar. Ancak, üçüncü okun sol tarafında başlangıç kökü vardır. Çizim hakkında daha fazla bilgi için bkz. LineGeometry ve GeometryGroup.

<StackPanel 
  xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' 
  FlowDirection="RightToLeft">

  <Path Stroke="Blue" StrokeThickness="4">
    <Path.Data>
      <GeometryGroup >
        <LineGeometry StartPoint="300,10" EndPoint="350,30" />
        <LineGeometry StartPoint="10,30" EndPoint="352,30" />
        <LineGeometry StartPoint="300,50" EndPoint="350,30" />
      </GeometryGroup>
    </Path.Data>
  </Path>

  <Path Stroke="Red" StrokeThickness="4" FlowDirection="RightToLeft">
    <Path.Data>
      <GeometryGroup >
        <LineGeometry StartPoint="300,10" EndPoint="350,30" />
        <LineGeometry StartPoint="10,30" EndPoint="352,30" />
        <LineGeometry StartPoint="300,50" EndPoint="350,30" />
      </GeometryGroup>
    </Path.Data>
  </Path>
 
  <Path Stroke="Green" StrokeThickness="4" FlowDirection="LeftToRight">
    <Path.Data>
      <GeometryGroup >
        <LineGeometry StartPoint="300,10" EndPoint="350,30" />
        <LineGeometry StartPoint="10,30" EndPoint="352,30" />
        <LineGeometry StartPoint="300,50" EndPoint="350,30" />
      </GeometryGroup>
    </Path.Data>
  </Path>
</StackPanel>

Aşağıdaki grafik, öğesi kullanılarak çizilen oklarla önceki örneğin çıktısını Path gösterir:

Graphic that illustrates arrows drawn using the Path element.

Image vePath, WPF'nin nasıl kullandığına ilişkin iki örnektirFlowDirection. Ui öğelerini bir kapsayıcı içinde belirli bir yönde yerleştirmenin yanı sıra, FlowDirection bir yüzeyde mürekkep işleyen öğelerle birlikte InkPresenter kullanılabilir, LinearGradientBrush, RadialGradientBrush. İçeriğiniz için soldan sağa davranışı taklit eden veya tam tersi bir sağdan sola davranışa ihtiyacınız olduğunda, Windows Presentation Foundation (WPF) bu özelliği sağlar.

Sayı Değiştirme

Geçmişte Windows, aynı basamaklar için farklı kültürel şekillerin temsiline izin vererek sayı değişimini desteklemiştir. Bu arada bu basamakların iç depolaması farklı yerel ayarlar arasında birleştirilir; örneğin, sayılar iyi bilinen onaltılık değerlerinde (0x40, 0x41) depolanır, ancak seçilen dile göre görüntülenir.

Bu, uygulamaların sayısal değerleri bir dilden diğerine dönüştürmeye gerek kalmadan işlemesine olanak sağlamıştır. Örneğin, bir kullanıcı yerelleştirilmiş Bir Arapça Windows'ta Bir Microsoft Excel elektronik tablosu açabilir ve Arapça şeklindeki sayıları görebilir, ancak Windows'un Avrupa sürümünde açabilir ve aynı sayıların Avrupa gösterimini görebilir. Bu, genellikle aynı belgedeki sayılara eşlik ettiğinden virgül ayırıcıları ve yüzde simgesi gibi diğer simgeler için de gereklidir.

Windows Presentation Foundation (WPF) aynı geleneğe devam eder ve değiştirmenin ne zaman ve nasıl kullanıldığı üzerinde daha fazla kullanıcı denetimi sağlayan bu özellik için daha fazla destek ekler. Bu özellik herhangi bir dil için tasarlanmış olsa da, özellikle belirli bir dil için basamakları şekillendirmenin uygulama geliştiricileri için zor olduğu çift yönlü içerikte kullanışlıdır çünkü bir uygulamanın üzerinde çalışabileceği çeşitli kültürler vardır.

Windows Presentation Foundation'da (WPF) sayı değiştirmenin Substitution nasıl çalıştığını denetleen temel özellik bağımlılık özelliğidir. sınıfı, NumberSubstitution metindeki sayıların nasıl görüntüleneceğini belirtir. Davranışını tanımlayan üç genel özelliği vardır. Özelliklerin her birinin özeti aşağıdadır:

Culturesource:

Bu özellik, sayılar için kültürün nasıl belirlendiğini belirtir. Üç NumberCultureSource numaralandırma değerinden birini alır.

CultureOverride:

CultureOverride özelliği yalnızca özelliği olarak ayarlanırsa Override ve yoksayılırsa CultureSource kullanılır. Sayı kültürünü belirtir. varsayılan değeri olan değeri nullen-US olarak yorumlanır.

Değiştirme:

Bu özellik, gerçekleştirilecek sayı değiştirme türünü belirtir. Aşağıdaki NumberSubstitutionMethod numaralandırma değerlerinden birini alır:

  • AsCulture: Değiştirme yöntemi, sayı kültürünün NumberFormatInfo.DigitSubstitution özelliğine göre belirlenir. Bu varsayılan seçenektir.

  • Context: Sayı kültürü Arapça veya Farsça bir kültürse, basamakların bağlama bağlı olduğunu belirtir.

  • European: Sayılar her zaman Avrupa rakamı olarak işlenir.

  • NativeNational: Sayılar, kültürün tarafından belirtilen NumberFormatsayı kültürü için ulusal basamaklar kullanılarak işlenir.

  • Traditional: Sayılar, sayı kültürü için geleneksel basamaklar kullanılarak işlenir. Çoğu kültür için bu, ile NativeNationalaynıdır. Ancak, NativeNational bazı Arap kültürleri için Latince basamaklar elde ederken, bu değer tüm Arap kültürleri için Arapça basamaklarla sonuç verir.

Bu değerler çift yönlü içerik geliştiricisi için ne anlama gelir? Çoğu durumda, geliştiricinin yalnızca her metin kullanıcı arabirimi öğesinin dilini tanımlaması FlowDirection gerekebilir; NumberSubstitution örneğin Language="ar-SA" mantık, sayıları doğru kullanıcı arabirimine göre görüntülemeyi üstlenir. Aşağıdaki örnekte, Windows'un Arapça sürümünde çalışan bir Windows Presentation Foundation (WPF) uygulamasında Arapça ve İngilizce sayıların kullanılması gösterilmektedir.

<Page 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
  <StackPanel>
   <TextBlock Background="LightGreen" FontSize="32" 
      Language="ar-SA" FlowDirection="RightToLeft">1+2=3</TextBlock>
   <TextBox Background="LightGreen" FontSize="32" 
      Language="ar-SA" FlowDirection="RightToLeft">1+2=3</TextBox>
   <TextBlock Background="LightBlue" FontSize="32">1+2=3</TextBlock>
   <TextBox Background="LightBlue" FontSize="32">1+2=3</TextBox>
 </StackPanel>
</Page>

Aşağıdaki grafikte, Arapça ve İngilizce sayıların görüntülendiği Arapça bir Windows sürümünde çalışıyorsanız önceki örneğin çıktısı gösterilmektedir:

Graphic that shows Arabic and English numbers.

FlowDirection bunun yerine ayarının Avrupa rakamlarına yol açması LeftToRightFlowDirection bu örnekte önemliydi. Aşağıdaki bölümlerde, belgenizin her yanındaki basamakların birleşik bir görüntüsünün nasıl görüntüleneceği açıklanmıştır. Bu örnek Arapça Windows üzerinde çalışmıyorsa, tüm basamaklar Avrupa basamakları olarak görüntülenir.

Değiştirme Kurallarını Tanımlama

Gerçek bir uygulamada Dili program aracılığıyla ayarlamanız gerekebilir. Örneğin, özniteliğini xml:lang sistemin kullanıcı arabirimi tarafından kullanılanla aynı olacak şekilde ayarlamak veya uygulama durumuna bağlı olarak dili değiştirmek isteyebilirsiniz.

Uygulamanın durumuna göre değişiklik yapmak istiyorsanız, Windows Presentation Foundation (WPF) tarafından sağlanan diğer özellikleri kullanın.

İlk olarak, uygulama bileşeninin NumberSubstitution.CultureSource="Text"değerini ayarlayın. Bu ayarın kullanılması, ayarların gibi varsayılan TextBlockolarak "Kullanıcı" olan metin öğeleri için kullanıcı arabiriminden gelmemesini sağlar.

Örnek:

<TextBlock
   Name="text1" NumberSubstitution.CultureSource="Text">
   1234+5679=6913
</TextBlock>

İlgili C# kodunda Language özelliğini olarak ayarlayın."ar-SA"

text1.Language = System.Windows.Markup.XmlLanguage.GetLanguage("ar-SA");

Özelliğini geçerli kullanıcının kullanıcı arabirimi diline ayarlamanız Language gerekiyorsa aşağıdaki kodu kullanın.

text1.Language = System.Windows.Markup.XmlLanguage.GetLanguage(System.Globalization.CultureInfo.CurrentUICulture.IetfLanguageTag);

CultureInfo.CurrentCulture çalışma zamanında geçerli iş parçacığı tarafından kullanılan geçerli kültürü temsil eder.

Son XAML örneğiniz aşağıdaki örneğe benzer olmalıdır.

<Page x:Class="WindowsApplication.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Code Sample" Height="300" Width="300"
>
    <StackPanel>
      <TextBlock Language="ar-SA" 
         FlowDirection="RightToLeft">عربى: 1+2=3
      </TextBlock>
      <TextBlock Language="ar-SA" 
         FlowDirection="RightToLeft" 
         NumberSubstitution.Substitution="European">عربى: 1+2=3 
      </TextBlock>
    </StackPanel>
</Page>

Son C# örneğiniz aşağıdakine benzer olmalıdır.

namespace BidiTest
{
    public partial class Window1 : Window
    {

        public Window1()
        {
            InitializeComponent();

            string currentLanguage =
                System.Globalization.CultureInfo.CurrentCulture.IetfLanguageTag;

            text1.Language = System.Windows.Markup.XmlLanguage.GetLanguage(currentLanguage);

            if (currentLanguage.ToLower().StartsWith("ar"))
            {
                text1.FlowDirection = FlowDirection.RightToLeft;
            }
            else
            {
                text1.FlowDirection = FlowDirection.LeftToRight;
            }
        }
    }
}

Aşağıdaki grafikte, arapça sayıların görüntülendiği her iki programlama dili için de pencerenin nasıl göründüğü gösterilmektedir:

Graphic that displays Arabic numbers.

Değiştirme Özelliğini Kullanma

Windows Presentation Foundation'da (WPF) sayı değiştirmenin çalışma şekli hem metin öğesinin Diline hem de öğesine FlowDirectionbağlıdır. soldan FlowDirection sağa ise, Avrupa basamakları işlenir. Ancak, önünde Arapça metin varsa veya dili "ar" olarak ayarlanmışsa ve FlowDirection değeri ise RightToLeft, bunun yerine Arapça basamaklar işlenir.

Ancak bazı durumlarda birleşik bir uygulama oluşturmak isteyebilirsiniz, örneğin tüm kullanıcılar için Avrupa rakamları. Veya belirli Stylebir hücredeki Table Arapça basamaklar. Bunu yapmak için özelliği kullanmak Substitution kolay bir yoldur.

Aşağıdaki örnekte, ilkinde TextBlock özellik ayarlanmadığından Substitution algoritma Arapça basamakları beklendiği gibi görüntüler. Ancak ikincisinde TextBlock, değiştirme, Arapça sayıların varsayılan değişimini geçersiz kılarak Avrupa olarak ayarlanır ve Avrupa rakamları görüntülenir.

<Page x:Class="WindowsApplication.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Code Sample" Height="300" Width="300"
>
    <StackPanel>
      <TextBlock Language="ar-SA" 
         FlowDirection="RightToLeft">عربى: 1+2=3
      </TextBlock>
      <TextBlock Language="ar-SA" 
         FlowDirection="RightToLeft" 
         NumberSubstitution.Substitution="European">عربى: 1+2=3 
      </TextBlock>
    </StackPanel>
</Page>