2016-06-21 50 views
2

這裏是我的代碼文本菜單可檢查菜單項不工作

<UserControl.ContextMenu> 
     <ContextMenu> 
      <MenuItem IsCheckable="True" IsChecked="{Binding ElementName=btnSearch,Path=IsChecked}" Header="Search"/> 
     </ContextMenu> 
    </UserControl.ContextMenu> 

     <Grid> 
      <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" >   
       <ToggleButton Style="{StaticResource ButtonAnchor}" Content="Search" x:Name="btnSearch"/> 
      </StackPanel> 
     </Grid> 

<Grid Visibility="{Binding ElementName=btnSearch, Path=IsChecked,Converter={StaticResource BooleanToVisibilityConverter}}"> 
</Grid> 

我想改變使用切換按鈕被查改變,其工作最後網格的知名度卻怎麼也包括菜單項被查也改變過去電網的知名度。

+0

你是什麼意思?請澄清你的答案。你想在兩個控件被選中時隱藏最後一個網格,或者當其中一個控件被選中時另一個控件也被選中,然後隱藏網格? –

回答

0

如果我理解正確,你想改變這個網格的可見性,當他們都檢查或其中任何一個檢查。我認爲最好的辦法是去這裏討論這兩種情況,因爲你沒有說明你想要的是使用多重綁定。 這裏是我的實現,當我隱藏網格時,他們都檢查,但它很容易變動。

首先我們需要一個視圖。

<Window 
    x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:local="clr-namespace:WpfApplication1" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    Title="MainWindow" 
    Width="525" 
    Height="350" 
    mc:Ignorable="d"> 

    <Window.Resources> 
     <local:BooleanToVisibilityConverter x:Key="booleanToVisibilityConverter" /> 
    </Window.Resources> 

    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 

     <MenuItem 
      Name="test" 
      Grid.Row="0" 
      Header="Search" 
      IsCheckable="True" 
      IsChecked="False" /> 

     <Grid Grid.Row="1"> 
      <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center" > 
       <ToggleButton Content="Search" x:Name="btnSearch" IsChecked="False" /> 
      </StackPanel> 
     </Grid> 

     <Grid Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Bottom"> 
      <Grid.Visibility> 
       <MultiBinding Converter="{StaticResource booleanToVisibilityConverter}"> 
        <Binding ElementName="btnSearch" Path="IsChecked" /> 
        <Binding ElementName="test" Path="IsChecked" /> 
       </MultiBinding> 
      </Grid.Visibility> 

      <TextBlock Text="tralala" /> 
     </Grid> 

    </Grid> 
</Window> 

查看後我們需要一個轉換器。在我們的例子中是BooleanToVisibilityConverter。

public class BooleanToVisibilityConverter : IMultiValueConverter 
    { 
     public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
     { 
      if (values != null) 
      { 
       bool btnSerach = bool.Parse(values[0].ToString()); 
       bool menuItemTest = bool.Parse(values[1].ToString()); 

       if (btnSerach && menuItemTest) 
        return System.Windows.Visibility.Visible; 
      } 

      return System.Windows.Visibility.Collapsed; 
     } 

     public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    } 

您可以根據需要輕鬆更改或擴展代碼。希望這可以幫助。