Часть меня удивляется, если вы могли бы предоставить свою собственную функцию санитарии так же просто, как это:
$value = preg_replace('/[^a-zA-Z_]*/', '', $value);
Я действительно не продумал это, но кажется, что удаление чего-либо, кроме символов и подчеркиваний может работать.
Если Вы захотите заменить целый стиль (а не просто элементы его) тогда, то Вы будете, вероятно, хранить те стили в ресурсах. Необходимо быть в состоянии сделать что-то вроде:
<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();
}
}
Это не что-то, что я делаю очень часто, но это должно работать из памяти:)
Кажется, что необходимо использовать класс 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>
объекта контекста данных