2016-02-15 3 views
0

У меня есть ToggleButton с надписью. Когда он получает проверил изменения текста этикетки и становится длиннее, а FontSize становится все меньше:WPF ToggleButton with Checked + Pressed State

<Style x:Key="MyToggleButtonStyle" TargetType="{x:Type ToggleButton}"> 
    <Setter Property="FontSize" Value="22" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ToggleButton}"> 
       <Grid> 
        <Border Background="#FF0000"/> 
        <ContentPresenter x:Name="content"/> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsChecked" Value="True"> 
         <Setter Property="FontSize" Value="17" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

<ToggleButton {StaticResource MyToggleButtonStyle}" Click="ToggleButton_Click"> 
    <TextBlock x:Name="ToggleButtonLabel" Text="Some Text"/> 
</ToggleButton> 


private void ToggleButton_Click(object sender, RoutedEventArgs e) { 
    ToggleButtonLabel.Text = ((ToggleButton)sender).IsChecked == false ? "Some Text" : "Some Longer Text"; 
} 

Кнопка также должна иметь прессованную состояние, в котором FontSize уменьшается относительно его текущего FontSize. Другими словами, он должен работать так:

Нормальный: Размер шрифта = 22

Прессованные: Размер шрифта = 20

Проверено: Размер шрифта = 17

Проверено + Пресса: Fontsize = 15

Я знаю Я могу легко использовать триггер для IsPressed государства, но это будет также изменить его Проверили + прессованный, который не то, что я хочу:

<Trigger Property="IsPressed" Value="True"> 
    <Setter Property="FontSize" Value="20" /> 
</Trigger> 

Так что это самый простой, чистый способ добавить четвертое визуальное состояние, чтобы объединить Проверено + нажато?

ответ

0

Вы можете добиться того, что легко от multitriggers:

<Style x:Key="MyToggleButtonStyle" TargetType="{x:Type ToggleButton}"> 
    <Setter Property="FontSize" Value="22" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ToggleButton}"> 
       <Grid> 
        <Border Background="#FF0000" /> 
        <ContentPresenter x:Name="content" /> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="IsPressed" Value="True" /> 
          <Condition Property="IsChecked" Value="False" /> 
         </MultiTrigger.Conditions> 
         <Setter Property="FontSize" Value="20" /> 
        </MultiTrigger> 
        <MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="IsPressed" Value="False" /> 
          <Condition Property="IsChecked" Value="True" /> 
         </MultiTrigger.Conditions> 
         <Setter Property="FontSize" Value="17" /> 
        </MultiTrigger> 
        <MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="IsPressed" Value="True" /> 
          <Condition Property="IsChecked" Value="True" /> 
         </MultiTrigger.Conditions> 
         <Setter Property="FontSize" Value="15" /> 
        </MultiTrigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

<ToggleButton Style="{StaticResource MyToggleButtonStyle}" Click="ToggleButton_Click"> 
    <TextBlock x:Name="ToggleButtonLabel" Text="Some Text" /> 
</ToggleButton> 
+0

Perfect. благодаря – Karmacon

Смежные вопросы