是否可以设置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>
答案 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>