Свойство толщины SolidColorBrush - PullRequest
0 голосов
/ 25 марта 2010

Можно ли установить свойство толщины 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 Ответ

1 голос
/ 25 марта 2010

Свойство 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();
    }
}

Таким образом, вы можете просто определить нужные стили и загрузить подходящий из вашего класса конвертера.

Лучший способ определить свой стиль - использовать Resource Dictionary - это всего лишь файл 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 / UserControls, вам нужно включить его в свои Window.Resources / UserControl.Resources в каждом файле xaml, где он должен находиться используемый. Если вы включаете несколько ресурсов, вам нужно использовать тег (см. Ниже), в противном случае просто пропустите эту часть и включите свой ResourceDictionary самостоятельно в тегах.

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