2014-03-07 44 views
2

我試圖完成有幾個ToggleButtons的行爲有點像單選按鈕 - 但重要的區別是既沒有檢查是有效的情況 (只有可以一次檢查,它們是互斥的)。當DataTrigger綁定到它時,WPF ToggleButton沒有被檢查

下面是一些XAML,幾乎工作:

<Window> 
    <Grid> 
     <ToolBarTray DockPanel.Dock="Top"> 
      <ToolBar> 
       <ToggleButton x:Name="ShowLineGridToggleButton"> 
        <ToggleButton.Style> 
         <Style TargetType="ToggleButton"> 
          <Style.Triggers> 
           <DataTrigger Binding="{Binding IsChecked, ElementName=ShowDotGridToggleButton}" Value="True"> 
            <Setter Property="IsChecked" Value="False" /> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </ToggleButton.Style> 
        <Image Source="../Images/ShowLineGrid.png" /> 
       </ToggleButton> 
       <ToggleButton x:Name="ShowDotGridToggleButton"> 
        <ToggleButton.Style> 
         <Style TargetType="ToggleButton"> 
          <Style.Triggers> 
           <DataTrigger Binding="{Binding IsChecked, ElementName=ShowLineGridToggleButton}" Value="True"> 
            <Setter Property="IsChecked" Value="False" /> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </ToggleButton.Style> 
        <Image Source="../Images/ShowDotGrid.png" /> 
       </ToggleButton> 
      </ToolBar> 
     </ToolBarTray> 
    <Grid> 
</Window> 

點擊一個按鈕,將取消的確是其他。不幸的是,所發生的事情是,點擊的按鈕不會被檢查。當鼠標移動到其上時,背景會正確更改,但當鼠標移開時,按鈕會顯示爲未選中。

註釋Setters允許點擊按鈕進行檢查。就好像Setter也沒有選中點擊按鈕。

我寧願在XAML中處理這個問題,也不願意通過事件處理程序實現代碼;這將會把所有的東西都定義在一個地方。

想法?

TIA!

回答

0

嘗試將您的ToggleButtons更改爲RadioButtons。然後,您可以將ToggleButton模板應用於每個模板,解決您的問題。

這應該編譯您:

<Window> 

    <Window.Resources> 
     <Style TargetType="{x:Type RadioButton}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate> 
         <ToggleButton IsChecked="{Binding IsChecked, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" 
          Content="{Binding Content, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"/> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Window.Resources> 

    <Grid> 
     <ToolBarTray DockPanel.Dock="Top"> 
      <ToolBar> 
       <Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition /> 
         <ColumnDefinition /> 
        </Grid.ColumnDefinitions> 
        <RadioButton x:Name="ShowLineGridToggleButton"> 
         <Image Source="../Images/ShowLineGrid.png" /> 
        </RadioButton> 
        <RadioButton Grid.Column="1" x:Name="ShowDotGridToggleButton"> 
         <Image Source="../Images/ShowDotGrid.png" /> 
        </RadioButton> 
       </Grid> 
      </ToolBar> 
     </ToolBarTray> 
    </Grid> 
</Window> 

正如你所看到的,你必須把單選按鈕在自己的列或他們得到的點擊事件感到困惑。

相關問題