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

Diğer herhangi bir geliştirme platformunun aksine, WPF çift yönlü içeriğin hızlı bir şekilde geliştirilmesini destekleyen çok sayıda özelliğe sahiptir. Örneğin, soldan sağa ve sağdan sola verileri aynı belgede karıştırın. WPF, Arapça ve Ibranice kullanıcılar gibi çift yönlü özellikler gerektiren kullanıcılar için aynı anda harika bir deneyim oluşturuyor.

Aşağıdaki bölümlerde çift yönlü içeriğin en iyi görüntüsüne nasıl ulaşılacağını gösteren örneklerle birlikte birçok çift yönlü özellikler açıklanmaktadır. çoğu örnek XAML kullanır, ancak kavramları C# veya Microsoft Visual Basic koduna kolayca uygulayabilirsiniz.

FlowDirection

WPF uygulamasında içerik akışı yönünü tanımlayan temel özellik FlowDirection . Bu özellik, ya da iki numaralandırma değerinden birine ayarlanabilir LeftToRightRightToLeft . Özelliği, öğesinden devraldığı tüm WPF öğeleri için kullanılabilir FrameworkElement .

Aşağıdaki örneklerde bir öğenin akış yönü ayarlanır TextBox .

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 grafik, önceki kodun nasıl işlediğini gösterir.

Graphic that illustrates the different flow directions.

Bir kullanıcı arabirimi (UI) ağacı içindeki bir öğe, FlowDirection kapsayıcısını öğesinden devralacak. Aşağıdaki örnekte, bir içinde yer TextBlockGrid alır Window . İçin ayarı, FlowDirectionWindow ve için ayarlamayı gerektirir GridTextBlock .

Aşağıdaki örnek ayarı gösterir FlowDirection .

<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>

En üst düzey Window bir RightToLeftFlowDirection öğesine sahiptir, bu nedenle içinde yer alan tüm öğeler aynı zamanda aynı şekilde devralınır FlowDirection . Belirtilen bir öğenin geçersiz kılınması için FlowDirection , önceki örnekte olduğu gibi bir açık yön değişikliği eklemesi gerekir TextBlockLeftToRight . Hiçbir değer FlowDirection tanımlandığında varsayılan değer geçerli olur LeftToRight .

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ştirmeye yönelik özel destek sağlar. HTML gibi biçimlendirme dilleri içerik yazıcılarını, metni gerekli herhangi bir yöne (4,0 Örneğin, "RTL" veya "LTR" değeri olarak alan "dir") göstermek için gerekli işaretlemeleri sağlar. Bu etiket FlowDirection özelliğine benzerdir, ancak FlowDirection özellik metin içeriğini düzene eklemek için daha gelişmiş bir şekilde çalışabilir ve metin dışındaki içerikler için kullanılabilir.

WPF içinde, bir FlowDocument metin, tablo, resim ve diğer öğelerin birleşimini barındırabileceğiniz çok yönlü BIR UI öğesidir. Aşağıdaki bölümlerdeki örnekler bu öğeyi kullanır.

Bir öğesine metin eklemek FlowDocument , bir şekilde daha fazla yapılabilir. Bunu yapmanın basit bir yolu, Paragraph metin gibi içerikleri gruplamak için kullanılan blok düzeyinde bir öğedir. Satır içi düzeyindeki öğelere metin eklemek için örnekleri Span ve kullanır Run . Span , diğer satır içi öğeleri gruplandırmak için kullanılan bir satır içi düzey akış içerik öğesidir, ancak Run biçimlendirilmemiş bir metnin çalıştırılmasını içeren bir satır içi düzey akış içerik öğesidir. Span, Birden çok Run öğe içerebilir.

İlk belge örneği, çeşitli ağ paylaşma adlarına sahip bir belge içerir; Örneğin \\server1\folder\file.ext . Arapça veya Ingilizce bir belgede bu ağ bağlantısına sahip olmanız, her zaman aynı şekilde görünmesini ister. Aşağıdaki grafik, span öğesinin kullanımını gösterir ve bir Arap belgesinde bağlantıyı gösterir RightToLeft :

Graphic that illustrates using the Span element.

Metin olduğundan, RightToLeft "\" gibi tüm özel karakterler metni sağdan sola sırada ayırır. Bu, bağlantının doğru sırada gösterilmemektedir ve bu nedenle sorunu çözmek için metnin, ayrı bir akışı korumak için katıştırılması gerekir RunLeftToRight . Her dil için ayrı olmak yerine, Run sorunu çözmenin daha iyi bir yolu, daha az sıklıkta kullanılan İngilizce metni daha büyük bir Arap içine katıştırmaktır Span .

Aşağıdaki grafikte, bir span öğesinde gömülü Run öğesi kullanılarak gösterilmektedir:

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

Aşağıdaki örnek, Run belgelerde ve öğelerinin kullanımını gösterir Span .

<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

SpanÖğesi, farklı akış yönlerine sahip metinler arasında sınır ayırıcısı olarak da kullanılır. SpanAynı akış yönüne sahip öğeler çift yönlü kapsamlar olarak kabul edilir, bu da Span öğelerin kapsayıcının içinde sıralanmasıdır FlowDirection , ancak öğesinin yalnızca öğesi içindeki içeriği Span izler FlowDirectionSpan .

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

Graphic that illustrates text blocks with different flow directions.

Aşağıdaki örnek, Span ve Run öğelerinin önceki grafikte gösterilen sonuçları oluşturmak için nasıl kullanılacağını gösterir.

<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>

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

XML ekleme: lang

Aşağıdaki grafikte, gibi sayılar ve aritmetik ifadeler kullanan başka bir örnek gösterilmektedir "200.0+21.4=221.4" . Yalnızca ayarlanmış olduğuna dikkat edin FlowDirection .

Graphic that displays numbers using only FlowDirection.

Bu uygulamanın kullanıcıları çıktı tarafından kaldırılır, ancak doğru olsa bile FlowDirection sayılar Arapça sayılar şekillendirilmiş olmalıdır.

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

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

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

Aşağıdaki örnek uygulamaya eklenir 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>

xml:langÖrneğin, hedeflenen bölgeye bağlı olarak birçok dilin farklı değerlere sahip olduğunu unutmayın, "ar-SA" ve "ar-EG" iki Arap çeşitlemelerini temsil edin. Önceki örneklerde, ve değerlerini tanımlamanız gerektiğini gösterir xml:langFlowDirection .

Metin olmayan öğelerle FlowDirection

FlowDirection metnin bir metin öğesinde nasıl akar, ancak neredeyse tüm diğer kullanıcı arabirimi öğelerinin akış yönünü de tanımlar. Aşağıdaki grafikte, ToolBarLinearGradientBrush soldan sağa degradeyle arka planını çizmek için yatay kullanılan bir gösterilmektedir.

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

FlowDirectionRightToLeft ' I ' a ayarladıktan sonra, yalnızca ToolBar düğmeler sağdan sola düzenlenirler, ancak hatta LinearGradientBrush uzaklıkları sağdan sola doğru hizalar.

Aşağıdaki grafikte, yeniden hizalaması gösterilmektedir LinearGradientBrush .

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

Aşağıdaki örnek bir çizer RightToLeftToolBar . (Sola doğru çizmek için FlowDirection üzerinde özniteliğini kaldırın ToolBar .

<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ı

FlowDirectionBeklenen şekilde davranmayan birkaç durum vardır. Bu bölümde bu özel durumların ikisi ele alınmaktadır.

Görüntü

Bir Image görüntüyü görüntüleyen bir denetimi temsil eder. XAML 'de Source , görüntülenecek Tekdüzen Kaynak tanımlayıcısını (URI) tanımlayan bir özellik ile birlikte kullanılabilir Image .

Diğer Kullanıcı arabirimi öğelerinden farklı olarak, bir Image , kapsayıcısını sınıfından almaz FlowDirection . Ancak, açıkça olarak FlowDirection ayarlandıysa, RightToLeftImage yatay olarak çevrilmiş görüntülenir. Bu, çift yönlü içerik geliştiricileri için kullanışlı bir özellik olarak uygulanır; Bazı durumlarda görüntüyü yatay olarak çevirme istenen etkiyi üretir.

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

Graphic that illustrates a flipped image.

Aşağıdaki örnek, ImageFlowDirection öğesinden öğesini içeren öğesinden devralmayı gösterir StackPanel .

Not

C:\ uygulamanızda ms_logo.jpg adında bir dosyanız olmalıdır Bu örneği çalıştırmak için sürücü.

<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>

Not

İndirme dosyalarında yer alan bir ms_logo.jpg dosyasıdır. Kod .jpg dosyanın projenizin içinde olmadığı, ancak C:\ üzerinde bir yerde olduğunu varsayar. sürücü. Proje dosyalarından .jpg C:\ uygulamanıza kopyalamanız gerekir projenin içindeki dosyayı aramak için kodu sürücü olarak değiştirin veya değiştirin. Bu değişikliği yapmak için Source="file://c:/ms_logo.jpg"Source="ms_logo.jpg" .

Yollar

Buna ek olarak Image , başka ilginç bir öğe olur Path . Yol, bir dizi bağlantılı çizgi ve eğri çizebileceğiniz bir nesnedir. Onunla ilgili benzer bir şekilde davranır Image ; Örneğin, onun FlowDirection yatay bir RightToLeftFlowDirection yansımasıdır LeftToRight . Bununla birlikte, bir sürümünden farklı olarak, ImagePathFlowDirection kapsayıcısını kapsayımla devralır ve bir öğenin açıkça belirtilmesi gerekmez.

Aşağıdaki örnek 3 satır kullanarak basit bir ok çizer. İlk ok, RightToLeftStackPanel Başlangıç ve bitiş noktalarının sağ taraftaki bir köke göre ölçülmesi için akış yönünü öğesinden devralır. Bir açık olan ikinci ok, RightToLeftFlowDirection sağ tarafta da başlatılır. Ancak, üçüncü ok sol tarafta başlangıç köküne sahiptir. Çizim hakkında daha fazla bilgi için LineGeometry bkz GeometryGroup . ve.

<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, bir önceki örneğin çıktısını öğesi kullanılarak çizilen oklarla gösterir Path :

Graphic that illustrates arrows drawn using the Path element.

Imageve Path Windows Presentation Foundation (WPF) öğesinin nasıl kullandığını gösteren iki örnektir FlowDirection . Bir kapsayıcı içinde belirli bir yönde Kullanıcı arabirimi öğelerini yerleştirmek için, bir FlowDirectionInkPresenter yüzey üzerinde mürekkep oluşturan, LinearGradientBrush ,, ve gibi öğelerle birlikte kullanılabilir RadialGradientBrush . içeriğiniz için soldan sağa davranışa uygun bir sağdan sola davranışa ihtiyacınız olduğunda ya da tam tersi de Windows Presentation Foundation (WPF) bu yeteneği sağlar.

Sayı değiştirme

tarihsel olarak, Windows farklı kültürel şekillerin farklı yerel ayarlar arasında birleştirilmiş olan bu basamakların iç depolamayı tutarken aynı rakamlarla aynı basamakların gösterimine izin vererek, sayı değişimini destekliyordu. örneğin sayılar, bilinen onaltılık değerlerinde (0x40, 0x41) depolanır, ancak seçilen dile göre görüntülenir.

bu, uygulamaların bir dilden diğerine dönüştürülmesi gerekmeden sayısal değerleri işlemesini izin vermiştir. örneğin, bir kullanıcı yerelleştirilmiş arapça Windows bir Microsoft Excel elektronik tablosu açabilir ve arapça şeklinde bir Windows, ancak bu sayıları bir avrupa sürümünde açabilir ve aynı sayıların avrupa gösterimini görebilirler. Bu Ayrıca, genellikle aynı belgedeki sayıları karşılamadığı için virgül ayırıcıları ve yüzde simgesi gibi diğer semboller için de gereklidir.

Windows Presentation Foundation (WPF) aynı gelenek devam eder ve bu özellik için, değiştirme ne zaman ve nasıl kullanıldığı konusunda daha fazla kullanıcı denetimine izin veren daha fazla destek ekler. Bu özellik herhangi bir dil için tasarlanırken, özellikle bir uygulamanın üzerinde çalışacağı çeşitli kültürler nedeniyle, belirli bir dile ait basamakların şekillendirmesinde genellikle uygulama geliştiricileri için bir zorluk olduğu çift yönlü içerik için yararlıdır.

sayı değiştirme 'nin Windows Presentation Foundation (WPF) ' de nasıl çalıştığını denetleyen çekirdek özelliği Substitution bağımlılık özelliğidir. NumberSubstitutionSınıfı, metindeki sayıların nasıl görüntüleneceğini belirtir. Davranışını tanımlayan üç ortak özelliği vardır. Aşağıda her bir özellik özeti verilmiştir:

Külsal kaynak:

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

CultureOverride:

CultureOverrideÖzelliği yalnızca CultureSource özelliği olarak ayarlanmışsa Override ve aksi durumda yoksayılırsa kullanılır. Kültür sayısını belirtir. Değeri null , varsayılan değer en-US olarak yorumlanır.

Değiştirme:

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

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

  • Context: Sayı kültürü bir Arap veya Farsça kültürü ise, basamakların içeriğe göre olduğunu belirtir.

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

  • NativeNational: Sayılar, kültürün kültür tarafından belirtildiği gibi, sayı kültürüne ilişkin ulusal basamaklar kullanılarak işlenir NumberFormat .

  • Traditional: Sayılar, sayı kültürü için geleneksel basamaklar kullanılarak işlenir. Çoğu kültürde bu, ile aynıdır NativeNational . Ancak, NativeNational bazı Arap kültürleri Için Latin basamaklı sonuçlar oluşur, ancak bu değer tüm Arap kültürleri Için Arap rakamlarına neden olur.

Bu değerler çift yönlü içerik geliştiricisi için ne anlama geliyor? Çoğu durumda, geliştiricinin yalnızca FlowDirection her bir metinsel Kullanıcı arabirimi öğesinin tanımlanması ve dili, örneğin, Language="ar-SA"NumberSubstitution MANTıĞıN doğru Kullanıcı arabirimine göre gösterilmesi gerekebilir. aşağıdaki örnek, Windows arapça bir sürümünde çalışan Windows Presentation Foundation (WPF) uygulamasında arapça ve ingilizce sayıları kullanmayı gösterir.

<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 ingilizce sayılar görüntülenirken Windows arapça bir sürümünde çalıştırıyorsanız önceki örneğin çıktısı gösterilmektedir:

Graphic that shows Arabic and English numbers.

FlowDirectionBu durumda, ' ın ' i olarak ayarlanması, FlowDirection Avrupa rakamları olacak şekilde ayarlandığında önemlidir LeftToRight . Aşağıdaki bölümlerde, belgenizin tamamında nasıl Birleşik bir basamak görüntüleneceği ele alınmaktadır. bu örnek arapça Windows üzerinde çalışmıyorsa, tüm basamaklar avrupa rakamları olarak görüntülenir.

Değiştirme kurallarını tanımlama

Gerçek bir uygulamada dili programlı olarak ayarlamanız gerekebilir. Örneğin, xml:lang özniteliği sistemin Kullanıcı arabirimi tarafından kullanılan ile aynı olacak şekilde ayarlamak ya da uygulamanın 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 sunulan diğer özelliklerden yararlanabilirsiniz.

İlk olarak, uygulama bileşeni ' ni ayarlayın NumberSubstitution.CultureSource="Text" . Bu ayarın kullanılması, ayarların varsayılan olarak "Kullanıcı" olan metin öğeleri için kullanıcı arabiriminden gelmediğinden emin olur TextBlock .

Örneğin:

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

Karşılık gelen C# kodunda, Language özelliğini olarak ayarlayın "ar-SA" .

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

LanguageÖzelliği geçerli kullanıcının kullanıcı arabirimi diline ayarlamanız 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ğinizi 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ğinizi 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 grafik, pencerenin programlama dili için nasıl göründüğünü gösterir, Arapça sayıları görüntüler:

Graphic that displays Arabic numbers.

Değiştirme özelliğini kullanma

Windows Presentation Foundation (WPF) ' de sayı değiştirme çalışma şekli, hem metin öğesi hem de onun diline bağlıdır FlowDirection . Doğru ise FlowDirection , Avrupa rakamları işlenir. Ancak, daha önce Arapça metindiyse veya dili "ar" ve ise, bu, FlowDirectionRightToLeft bunun yerine Arapça basamaklar işlenir.

Ancak bazı durumlarda, birleştirilmiş bir uygulama oluşturmak isteyebilirsiniz, örneğin, tüm kullanıcılar için Avrupa rakamları. Ya da Table belirli bir hücrelerde Arapça basamaklar Style . Bunu yapmanın kolay bir yolu Substitution özelliğini kullanmaktır.

Aşağıdaki örnekte, ilki TextBlockSubstitution özellik kümesine sahip değildir, bu nedenle algoritma beklenen şekilde Arapça rakamları görüntüler. Bununla birlikte, ikinci olarak TextBlock değiştirme, Arapça sayılar için varsayılan değişikliği geçersiz kılan 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>