Для перевода моего приложения WPF я использую расширение Markup, которое возвращает объект Binding. Это позволяет мне переключать язык во время работы приложения. Я использую эту разметку так:
<TextBlock Text="{t:Translate 'My String'}" />"
Я бы хотел изменить текст кнопок через триггер данных:
<Button>
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<!-- Custom control template, note the TextBlock formating -->
<ControlTemplate TargetType="{x:Type Button}">
<Grid x:Name="ContentHolder">
<ContentPresenter TextBlock.Foreground="Red" TextBlock.FontWeight="Bold" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<!-- Custom text triggered by Data Binding... -->
<Style.Triggers>
<DataTrigger Binding="{Binding MessageRowButton}" Value="Retry">
<Setter Property="Button.Content" Value="{t:Translate Test}" />
</DataTrigger>
<DataTrigger Binding="{Binding MessageRowButton}" Value="Acknowledge">
<Setter Property="Button.Content" Value="{t:Translate Test}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
Это приводит к следующему исключению:
Невозможно установить «Binding» в свойстве «Value» типа «Setter». «Привязка» может быть установлена только в свойстве DependencyProperty объекта DependencyObject.
Хорошо, это имеет смысл для меня. Я попытался определить TextBlock в своем ресурсе и использовать {StaticResource MyResource}
в качестве значения SetTrigger. Но когда я делаю это, стиль моей кнопки не применяется правильно ...
Как я могу работать с моим расширением разметки и изменять текст на кнопке, не нарушая возможности стилизовать строку внутри кнопки?