2011-08-17 54 views
2

我正在製作文本編輯器的過程中,我嘗試設置一些功能,以便用戶可以從組合框中選擇一種顏色,並且會更改顏色的文字。現在我的組合框正在使用像這樣使用組合框中的系統顏色更改文本顏色

<ToolBarTray.Resources> 
<ObjectDataProvider MethodName="GetType" ObjectType="{x:Type sys:Type}" x:Key="colorsTypeOdp"> 
<ObjectDataProvider.MethodParameters> 
<sys:String>System.Windows.Media.Colors, PresentationCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</sys:String> 
</ObjectDataProvider.MethodParameters> 
</ObjectDataProvider> 

<ObjectDataProvider ObjectInstance="{StaticResource colorsTypeOdp}" MethodName="GetProperties" x:Key="colorPropertiesOdp"> 
</ObjectDataProvider> 
</ToolBarTray.Resources> 

<ComboBox Name="colors" ItemsSource="{Binding Source={StaticResource colorPropertiesOdp}}" DisplayMemberPath="Name" SelectedValuePath="Name" MinWidth="100" ToolTip="Color" /> 

我試圖做一個SelectionChanged事件代碼,這將改變文本由用戶選擇系統顏色的資源加載系統顏色在XML中,如果你需要看到更多的代碼或需要更多的信息讓我知道。 comboBox只是加載了顏色的名稱,所以如何使用該名稱來獲取事件代碼中的實際顏色本身以將文本設置爲新顏色? 謝謝,牛肉

+0

有什麼問題嗎? –

+0

查看更新的問題 – Beef

回答

1

下面是一個綁定的例子(使用組合框的值來填充一個矩形),下面是一個改變標籤的TextBlock的顏色的例子(你顯然會更新你選擇的文字)。

綁定:

<StackPanel Orientation="Horizontal" 
      xmlns:sys="clr-namespace:System;assembly=mscorlib"> 
    <StackPanel.Resources> 
     <ObjectDataProvider MethodName="GetType" 
          ObjectType="{x:Type sys:Type}" 
          x:Key="colorsTypeOdp"> 
      <ObjectDataProvider.MethodParameters> 
       <sys:String>System.Windows.Media.Colors, PresentationCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</sys:String> 
      </ObjectDataProvider.MethodParameters> 
     </ObjectDataProvider> 
     <ObjectDataProvider ObjectInstance="{StaticResource colorsTypeOdp}" 
          MethodName="GetProperties" 
          x:Key="colorPropertiesOdp" /> 
    </StackPanel.Resources> 
    <!-- SelectedValuePath="Name" --> 
    <ComboBox Name="colors" 
       ItemsSource="{Binding Source={StaticResource colorPropertiesOdp}}" 
       DisplayMemberPath="Name" 
       SelectedValuePath="Name" 
       MinWidth="100" 
       ToolTip="Color" /> 
    <Rectangle Width="100" 
       Height="50" 
       Stroke="White" 
       StrokeThickness="2"> 
     <Rectangle.Fill> 
      <SolidColorBrush Color="{Binding ElementName=colors, Path=SelectedValue}" /> 
     </Rectangle.Fill> 
    </Rectangle> 
    <TextBlock x:Name="txtColor" 
       Foreground="White" 
       Text="{Binding ElementName=colors, Path=SelectedValue}" /> 
</StackPanel> 

事件:

colors.SelectionChanged += (s, e) => 
    { 
     BrushConverter converter = new BrushConverter(); 
     txtColor.Foreground = converter.ConvertFromString(colors.SelectedValue.ToString()) as SolidColorBrush; 
    };