相关疑难解决方法(0)

在WPF中,如何获取与鼠标光标下方的树视图项关联的数据对象?

在我的WPF应用程序中,我有一个树视图.此树视图绑定到自定义(即不是 TreeviewItems).所以我使用hierarchyDataTemplate来控制树的渲染方式.

当我的鼠标在树视图项上时,我想获得与树视图项关联的数据对象(即我的自定义类实例).我该怎么做呢?

澄清 - 我需要鼠标光标下的数据对象(不是UIElement).

假设我检索数据对象的方法具有以下签名:

private object GetObjectDataFromPoint(ItemsControl source, Point point)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

wpf treeview

6
推荐指数
1
解决办法
3461
查看次数

TabControl-阻止用户更改选定的选项卡:MessageBox导致错误

我一直在讨论这个问题,并且只找到了部分解决方案.

我正在尝试设置TabControl,以便在某些情况下我可以阻止用户更改当前选定的选项卡.当阻止用户更改当前选定的选项卡时,将显示一个对话框.

我已经阅读了以下文件:

我已经实现了第3个链接中指示的解决方案(尽管以上所有内容都会产生相同的错误).它有效, ......

如果用户执行以下操作,事情就会彻底搞乱:

  • 尝试在不允许此类操作时更改选项卡.MessageBox弹出错误.
  • 用户单击"确定"并返回到原始窗口.
  • 用户再次尝试更改选项卡. 没有MessageBox出现.
  • 如果用户最小化窗口,然后再次最大化它,则出现应该出现的MessageBox.
  • 用户单击"确定"并返回到原始窗口... 但是选项卡已更改为之前选择的选项卡,即使它们不能更改选项卡.

这显然不是理想的行为. 为什么MessageBox不是第二次出现,为什么不应该禁用这个选项卡呢?

如果我删除MessageBox部分,它工作正常.

以下是TabControl.SelectionChanged事件处理程序的代码:

bool _isChanging = false;

    private void tabControlForNavigation_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if (!_isChanging && canChangeTabs.IsChecked.HasValue)
        {
            _isChanging = true;


            bool canLeave = canChangeTabs.IsChecked.Value;  //normally this would be replaced by a check in the ViewModel

            if (!canLeave)
            {
                int prevIndex = tabControlForNavigation.Items.IndexOf(tabControlForNavigation.SelectedContent);
                tabControlForNavigation.SelectedIndex = prevIndex;
                MessageBox.Show("Can't change tabs!"); //if I comment out this line, …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml tabcontrol mvvm

5
推荐指数
1
解决办法
5010
查看次数

标签 统计

wpf ×2

c# ×1

mvvm ×1

tabcontrol ×1

treeview ×1

xaml ×1