Фон кнопки на основе текста текстового блока содержимого

#wpf #xaml #button

#wpf #xaml #кнопка

Вопрос:

Я пытаюсь установить Button цвет фона на основе TextBlock Text . TextBlock является частью Button ‘s Content и привязан к свойству viewmodel.

 <Button Style="{StaticResource ButtonStyle}">
      <Button.Content>
            <StackPanel>
                  <TextBlock Text="Title" />
                  <TextBlock Text="{Binding SomeValue, Mode=OneWay}" />
            </StackPanel>
      </Button.Content>
</Button>

<Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
      <Setter Property="Template">
          <Setter.Value>
               <ControlTemplate TargetType="{x:Type Button}">
                     <Border Name="bd">
                          <ContentPresenter />
                     </Border>
                     <ControlTemplate.Triggers>
                         //HOW TO HERE...
                         <Trigger Property="Text" Value="SomeText 1">
                              <Setter TargetName="bd" Property="Background" Value="#b5e61d"/>  
                         </Trigger>
                         <Trigger Property="Text" Value="SomeText 2">
                              <Setter TargetName="bd" Property="Background" Value="#99d9ea"/>  
                         </Trigger>
                     </ControlTemplate.Triggers>
               </ControlTemplate>  
          </Setter.Value>
      </Setter>
 </Style>
  

введите описание изображения здесь

Ответ №1:

Я предлагаю включить текстовый блок заголовка в шаблон кнопки, а затем создать триггеры на основе Content значения:

 <Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border Name="bd">
                    <StackPanel>
                        <TextBlock Text="Title" HorizontalAlignment="Center"/>
                        <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/>
                    </StackPanel>
                </Border>

                <ControlTemplate.Triggers>
                    <Trigger Property="Content" Value="SomeText 1">
                        <Setter TargetName="bd" Property="Background" Value="#b5e61d"/>
                    </Trigger>
                    <Trigger Property="Content" Value="SomeText 2">
                        <Setter TargetName="bd" Property="Background" Value="#99d9ea"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
  
 <Button Style="{StaticResource ButtonStyle}" Content="{Binding SomeValue}" />