0

XAML 代码

<TreeView.Resources>
  <local:BoolToVisibleOrHidden x:Key="BoolToVisConverter" Collapse="True"/>
</TreeView.Resources>
<TreeViewItem Header="First Child" Name="_firstChild"  
  Visibility="{Binding Path=VisibleOnCheck, Mode=OneWay, NotifyOnTargetUpdated=True, Converter={StaticResource BoolToVisConverter}}" />
 <CheckBox Name="_checkBoxvisible" IsChecked="{Binding Path= VisibleOnCheck, Mode=TwoWay}" Content="show" Checked="CheckBox />

复选框已选中

private void CheckBox(object sender, RoutedEventArgs e)
{
  if (MessageBox.Show("", "", MessageBoxButton.YesNo) == 
    System.Windows.Forms.DialogResult.Yes)
  {   
    VisibleOnCheck = true;
  } 
  else
  {
    VisibleOnCheck = false; 
  }
}

型号代码

Private bool __visible;
public bool VisibleOnCheck
{
    get { return _ visible; }
    set { _visible = value; OnPropertyChanged("VisibleOnCheck "); }
}

public class BoolToVisibleOrHidden : IValueConverter
{
    #region Constructors

    public BoolToVisibleOrHidden() { }
    #endregion

    #region Propertie Collapse

    public bool Collapse { get; set; }
    public bool Reverse { get; set; }

    #endregion

    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        bool bValue = (bool)value;

            if (bValue != Reverse)
            {
                return Visibility.Visible;
            }
            else
            {
                if (Collapse)
                    return Visibility.Collapsed;
                else
                    return Visibility.Hidden;
            }
    }

    public object ConvertBack(object value, Type targetType, object parameter,
                              System.Globalization.CultureInfo culture)
    {
        Visibility visibility = (Visibility) value;

        if (visibility == Visibility.Visible)
            return !Reverse;
        else
            return Reverse;
    }

    #endregion
    }

我想要,当 MessageBox .Yes 单击时,Treeview 项目标题应该可见,但这里它的可见 MessageBox 和 TreeviewItem 同时不单击 Messagebox.yes,任何人都可以帮忙。

4

1 回答 1

0

您在 CheckBox 上有一个 TwoWay 绑定到VisibleOnCheck,所以如果您检查Checkbox它会VisibilityTreeViewItem.

如果要VisibleOnCheck基于 Checked 事件处理程序处理 ,DialogResult则必须删除 TwoWay 绑定或完全删除该绑定。

<CheckBox Name="_checkBoxvisible" Content="show" Checked="CheckBox />

我还建议使用WPF MessageBoxover the Winformsone,将另一个框架拖入MessageBox.

private void CheckBox(object sender, RoutedEventArgs e)
{
   VisibleOnCheck = MessageBox.Show("","", MessageBoxButton.YesNo) == MessageBoxResult.Yes;
} 

编辑

由于问题是由于两个控件都绑定到您VisibleOnCheck可以直接绑定TreeViewItem VisibilityCheckboxXaml

<TextBlock Text="TreeViewItem" Visibility="{Binding IsChecked, ElementName=chkbx, Converter={StaticResource BooleanToVisibilityConverter}}" />
<CheckBox x:Name="chkbx" Content="CheckBox" Checked="Checked"   />

如果只是IsChecked根据您的 Dialog 结果设置

private void Checked(object sender, RoutedEventArgs e)
{
     (sender as CheckBox).IsChecked = MessageBox.Show("","", MessageBoxButton.YesNo) == MessageBoxResult.Yes;
}
于 2013-05-03T09:30:15.390 回答