Привязка для стилей WPF

Часть меня удивляется, если вы могли бы предоставить свою собственную функцию санитарии так же просто, как это:

$value = preg_replace('/[^a-zA-Z_]*/', '', $value);

Я действительно не продумал это, но кажется, что удаление чего-либо, кроме символов и подчеркиваний может работать.

34
задан Matthew Savage 4 January 2009 в 06:47
поделиться

2 ответа

Если Вы захотите заменить целый стиль (а не просто элементы его) тогда, то Вы будете, вероятно, хранить те стили в ресурсах. Необходимо быть в состоянии сделать что-то вроде:

<Button>
    <Button.Style>
        <MultiBinding Converter="{StaticResource StyleConverter}">
            <MultiBinding.Bindings>
                <Binding RelativeSource="{RelativeSource Self}"/>
                <Binding Path="MyStyleString"/>
            </MultiBinding.Bindings>
        </MultiBinding>
    </Button.Style>
</Button>

При помощи MultiBinding и использующий Сам как первая привязка мы можем тогда ресурсы поиска в нашем преобразователе. Преобразователь должен реализовать IMultiValueConverter (а не IValueConverter) и может выглядеть примерно так:

class StyleConverter : IMultiValueConverter 
{
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        FrameworkElement targetElement = values[0] as FrameworkElement; 
        string styleName = values[1] as string;

        if (styleName == null)
            return null;

        Style newStyle = (Style)targetElement.TryFindResource(styleName);

        if (newStyle == null)
            newStyle = (Style)targetElement.TryFindResource("MyDefaultStyleName");

        return newStyle;
    }

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

Это не что-то, что я делаю очень часто, но это должно работать из памяти:)

37
ответ дан Steven Robbins 11 October 2019 в 06:48
поделиться

Кажется, что необходимо использовать класс DataTrigger . Это позволяет Вам применять различные стили к своей кнопке на основе, он доволен.

, Например, после стиля будет фоновое свойство кнопки изменения настроек к красному на основе значения свойства

<Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path="Some property"}" 
                     Value="some property value">
            <Setter Property="Background" Value="Red"/>
        </DataTrigger>
    </Style.Triggers>
</Style>
объекта контекста данных
15
ответ дан aku 11 October 2019 в 06:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: