2016-06-10 55 views
0

我嘗試在切換按鈕的IsChecked屬性發生更改時設置文本塊的內容(如下所示)。我嘗試了多種方式,但無法使其工作。將文本塊的內容設置爲切換按鈕

<ToggleButton VerticalAlignment="Center" Margin="4 0 0 0" Background="{DynamicResource AccentColorBrush}" Name="toggle"> 
    <StackPanel Orientation="Horizontal"> 
     <Rectangle Width="20" Height="20" Fill="{Binding RelativeSource={RelativeSource AncestorType=Button}, Path=Foreground}"> 
      <Rectangle.OpacityMask> 
       <VisualBrush Stretch="Fill" Visual="{StaticResource appbar_starwars_jedi}" /> 
      </Rectangle.OpacityMask> 
     </Rectangle> 
     <TextBlock x:Name="SimulationToggleButtonText" Margin="4 0 0 0" VerticalAlignment="Center" Text="Start Simulation"> 
     </TextBlock> 
    </StackPanel> 
    <ToggleButton.Style> 
     <Style TargetType="{x:Type ToggleButton}"> 
      <Setter Property="Foreground" Value="Green"/> 
      <Style.Triggers> 
       <Trigger Property="IsChecked" Value="True"> 
        <Setter Property="Content" Value="Stop Simulation"/> 
        <Setter Property="Foreground" Value="Red"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </ToggleButton.Style> 
</ToggleButton> 

回答

0

你需要使用一個控制模板,請參閱該調整代碼:

<ToggleButton VerticalAlignment="Center" Margin="4 0 0 0" Background="{DynamicResource AccentColorBrush}" Name="toggle"> 
    <ToggleButton.Style> 
     <Style TargetType="{x:Type ToggleButton}"> 
      <Setter Property="Foreground" Value="Green"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type ToggleButton}"> 
         <StackPanel Orientation="Horizontal"> 
          <Rectangle Width="20" Height="20" Fill="{Binding RelativeSource={RelativeSource AncestorType=Button}, Path=Foreground}"> 
           <Rectangle.OpacityMask> 
            <VisualBrush Stretch="Fill" Visual="{StaticResource appbar_starwars_jedi}" /> 
           </Rectangle.OpacityMask> 
          </Rectangle> 
          <TextBlock x:Name="SimulationToggleButtonText" Margin="4 0 0 0" VerticalAlignment="Center" Text="Start Simulation"> 
          </TextBlock> 
         </StackPanel> 
         <ControlTemplate.Triggers> 
          <Trigger Property="IsChecked" Value="True"> 
           <Setter TargetName="SimulationToggleButtonText" Property="Text" Value="Stop Simulation"/> 
           <Setter TargetName="SimulationToggleButtonText" Property="Foreground" Value="Red"/> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </ToggleButton.Style> 
</ToggleButton> 

的問題是,您的切換按鈕風格不訪問是切換按鈕的一部分的任何控制內容。通過將控件和觸發器移動到模板,它們處於相同的範圍內。

+0

很好的回答!但我有一個小問題,視覺刷下的靜態資源圖標不顯示。可能是什麼原因。資源圖標在xaml文件中的window.resource下定義。 – Dilberted

+0

@Dedberted:這可能是一個不同的問題。也許你應該嘗試和重現一些較小的代碼來重現這一點,並提出一個新的問題。什麼是'appbar_starwars_jedi'?它是從「Visual」派生的對象嗎? – caesay

+0

它是在定義icons.xaml Dilberted