使用组合框中的系统颜色更改文本颜色

时间:2011-08-17 16:28:02

标签: wpf xaml .net-4.0 resources text-editor

我正在制作文本编辑器,我正在尝试设置一些功能,以便用户可以从组合框中选择颜色,这将改变文本的颜色。现在我的组合框正在使用像这样的资源

加载xml中的系统颜色
<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事件代码,用于将文本更改为用户选择的系统颜色,如果您需要查看更多代码或需要更多信息,请告诉我。 comboBox只是加载了颜色的名称,所以如何使用该名称在事件代码中获取实际颜色本身以将文本设置为新颜色? 谢谢,牛肉

1 个答案:

答案 0 :(得分:1)

以下是绑定示例(使用组合框的值填充矩形),下面是更改标记它的TextBlock颜色的示例(显然,您将更新所选文本)。 / p>

<强>绑定:

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