2011-08-17 55 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; 
    };