【问题标题】:expose Togglebutton ischecked property公开 Togglebutton ischecked 属性
【发布时间】:2017-08-31 21:52:05
【问题描述】:

我有 2 个用户控件,UC1 和 UC2: UC1:有 3 个切换按钮,Button1、Button2、Button3 UC2:拥有带有 UI 元素的画布。等:椭圆1

我想在 Button1.ischecked == true 时隐藏 ellipse1

我暴露了togglebutton的checked状态,但我一直读的是false。

UC1:

public ButtonLayout()
        {
            InitializeComponent();

        }

        public bool IsToggleChecked
        {
            get { return (bool)Button1.IsChecked; }

        } 

UC2:

ButtonLayout buttons = new ButtonLayout();
            if (buttons.IsToggleChecked == true)
            {
                elip1.Visibility = Visibility.Hidden;
            }

请告诉我哪里出错了

【问题讨论】:

  • 按原样,您的示例将为 false,因为 IsChecked 的默认值为 false,并且由于您似乎在构建 ButtonLayout 类后立即读取了该值,因此没有时间让它成为其他任何东西.我认为您的代码比这更复杂,所以也许您应该编辑问题以更好地反映您的问题。

标签: c# wpf


【解决方案1】:

您需要为您的ToggleButtons 公开Checked 和UnChecked 事件并从UC2 订阅它们。在那里,事件处理程序可以隐藏/显示椭圆。

注意:您可以将来自 ToggleButton 的两个事件聚合成一个您从 UC2 处理的 ToggleStateChanged 事件。

    public event Action<bool> ToggleStateChanged;

    public ButtonLayout()
    {
        InitializeComponent();
        ToggleButton1.Checked += (sender, e) => ToggleStateChanged?.Invoke(true);
        ToggleButton1.UnChecked += (sender, e) => ToggleStateChanged?.Invoke(false);
    }

和 UC2:

    ButtonLayout buttons = new ButtonLayout();
    buttons.ToggleStateChanged += SetVisibility;

与

    private void SetVisibility(bool isChecked)
    {
         elip1.Visibility = isChecked? Visibility.Hidden : Visibility.Visisble;
    }

【讨论】:

  • 嗨,约翰!谢谢您的回复。您能否详细说明您的答案。我需要依赖吗?
  • PS:如果你真的想在 WPF 中开发严肃的应用程序,稍后你可能想研究一下 MVVM 架构模式......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
  • 1970-01-01
  • 2011-06-20
  • 1970-01-01
  • 1970-01-01
  • 2011-06-25
  • 2010-12-04
相关资源
最近更新 更多