SolidColorBrush厚度属性

时间:2010-03-25 14:54:34

标签: wpf wpf-controls

是否可以设置SolidColorBrush的厚度属性。我问的原因是我有一个IValueConverter绑定到Textbox Border BorderBrush属性,我动态设置文本框的颜色,

<Window x:Class="MyWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    xmlns:sys="clr-namespace:System;assembly=mscorlib" Width="600" Height="570">

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

    <Style TargetType="{x:Type TextBlock}" x:Key="Style1">
        <Setter Property="BorderBrush" Value="DarkGrey" />
        <Setter Property="BorderThickness" Value="1" />
    </Style>

    <Style TargetType="{x:Type TextBlock}" x:Key="Style2">
        <Setter Property="BorderBrush" Value="Red" />
        <Setter Property="BorderThickness" Value="2" />
    </Style>

</ResourceDictionary>

1 个答案:

答案 0 :(得分:1)

BorderBrush属性只定义边框的颜色,以设置设置BorderThickness属性所需的厚度。

更好的方法是在转换器中设置Style属性,这样就可以使用单个转换器来设置边框画笔,粗细和您可能要修改的任何其他属性,例如字体颜色等

如果您在xaml资源字典中定义样式,可以在转换器中加载它,如此...

public class TextboxStyleConverter : IValueConverter
{
    public object Convert(
      object value, Type targetType, object parameter, 
      System.Globalization.CultureInfo culture)
    {
        if(some condition is true)
            return (Style)Application.Current.FindResource("MyStyle1");
        else
            return (Style)Application.Current.FindResource("MyStyle2");
    }

    public object ConvertBack(object value, Type targetType, object parameter, 
       System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

这样您就可以定义所需的样式,并从转换器类中加载适当的样式。

定义样式的最佳方法是在资源字典中 - 这只是解决方案中的xaml文件。请参阅下面的示例......

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

    <Style TargetType="{x:Type TextBlock}" x:Key="Style1">
        <Setter Property="BorderBrush" Value="DarkGrey" />
        <Setter Property="BorderThickness" Value="1" />
    </Style>

    <Style TargetType="{x:Type TextBlock}" x:Key="Style2">
        <Setter Property="BorderBrush" Value="Red" />
        <Setter Property="BorderThickness" Value="2" />
    </Style>

</ResourceDictionary>

如果要将ResourceDictionary保存在单独的文件中,以便多个Windows / UserControl可以轻松引用它,则需要将它包含在每个xaml文件的Window.Resources / UserControl.Resources中。用过的。如果您要包含多个资源,则需要使用该标记(请参阅下文),否则请忽略该部分并在标记中包含您自己的ResourceDictionary。

<Window>
    <Window.Resources>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="../ResourceDictionary1.xaml" />
            <ResourceDictionary Source="../ResourceDictionary2.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>