小编Mik*_*chs的帖子

在WPF应用程序中禁用右键单击(按住).

我正在研究在Windows XP Standard上运行的触摸屏应用程序.使用当前硬件来调用右键单击用户必须单击并保持几秒钟,但这可能会干扰其他操作,例如在滚动查看器中按住重复按钮,因此我决定禁用右键单击.

理想情况下,我不想在应用程序级别禁用右键,但如果不可能,禁用右键单击Windows级别也适用于我.

wpf windows-xp-embedded right-click touch

12
推荐指数
2
解决办法
1万
查看次数

如何数据绑定RibbonComboBox的SelectedItem

我的问题基本上就是这个问题.我认为这将有助于提供一些更容易重现问题的信息和代码.

使用RibbonControlsLibrary中的Microsoft.Windows.Controls.Ribbon.RibbonComboBox 感觉就像走过一个充满了bug的大沼泽,而不是你知道如何绕过它做的事情.

Anywho.我遇到的最大问题是数据绑定我的SelectedItem.

以下是我的开始(在我发现RibbonGallery之后?).在ComboBox的子元素上使用ItemsSource和SelectedItem,甚至在同一级别上已经给了我heebie-jeebies,但这似乎是正确的.

在示例应用程序中,我在ViewModel的构造函数中设置SelectedItem.但是,在运行应用程序时,不会显示SelectedItem.甚至VS设计师也正确地展示了"第二选择"!

正在运行应用运行应用程序 VS设计师: Visual Studio Designer

调试SelectedItem setter时,您会注意到多次传递.在第一次将它设置为ctor中的"第二个选项"(1,参见下面的调试日志)后,它将重置为null(2)(通过外部代码,我在控件本身中计算).在UI中打开下拉列表时,它将再次设置为null(3),然后在选择值时,将此值设置为两倍(4,5).我选择了"第二选项",然后用"第一选项"(6-9)重复该过程.这产生了以下日志(忽略了功能区控件中的一千零一个绑定异常...):

在此输入图像描述

显而易见的大问题是(2),这是重置我的初始选择.看起来当第一次显示控件时,它会被重置.一个非常丑陋的解决方法是通过计时器设置值.在用户控件的Loaded事件中设置它在这个示例应用程序中对我有用,但在我较重的现实应用程序中,它没有.无论如何,所有这些都是错误的.有谁知道更好的解决方案?

XAML:

<UserControl x:Class="WpfApplication1.RibbonComboBoxDemo"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:r="http://schemas.microsoft.com/winfx/2006/xaml/presentation/ribbon" 
             xmlns:local="clr-namespace:WpfApplication1"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">

    <UserControl.DataContext>
        <local:ViewModel />
    </UserControl.DataContext>

    <Grid>
        <r:Ribbon >
            <r:RibbonTab Header="First Tab">
                <r:RibbonGroup Header="Group">
                    <r:RibbonComboBox >
                        <r:RibbonGallery SelectedItem="{Binding SelectedItem, Mode=TwoWay}">
                            <r:RibbonGalleryCategory ItemsSource="{Binding Controls}" DisplayMemberPath="Caption" />
                        </r:RibbonGallery>
                    </r:RibbonComboBox>
                </r:RibbonGroup>
            </r:RibbonTab>
            <r:RibbonTab Header="Second Tab" />
        </r:Ribbon>
    </Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

视图模型:

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;

namespace WpfApplication1
{
    public class ViewModel …
Run Code Online (Sandbox Code Playgroud)

data-binding wpf selecteditem mvvm ribboncontrolslibrary

9
推荐指数
1
解决办法
8457
查看次数

如果返回的值为Null,如何使PriorityBinding失败?

我有一个PriorityBinding

<PriorityBinding FallbackValue="Bindings were null">
    <Binding Path="Foo" />
    <Binding Path="Bar" />
</PriorityBinding>
Run Code Online (Sandbox Code Playgroud)

我想这样做,如果Foo为null,它将使用Bar,如果两者都为null,它将使用FallbackValue.但是null是此属性的有效值,因为它只需要一个对象.

当值为null时,有没有办法让PriorityBinding前进到下一个绑定?我宁愿在XAML中这样做,但如果我不能,我只会为它做一个转换器.

编辑

我最后只为它写了一个转换器

public class NullToDependencyPropertyUnsetConverter 
    : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value ?? DependencyProperty.UnsetValue;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

wpf

7
推荐指数
1
解决办法
1971
查看次数

MVVM + Mediator模式:Mediator的注册发生得太晚了

我试图在WPF/MVVM应用程序中实现Mediator Pattern,以实现ViewModels之间的通信.

要应用中介模式,我从此链接下载了一个示例项目.然后我从样本中学到了它,然后我申请了我的示例项目.

我对这种模式的使用有一些问题,这反过来会产生荒谬的输出.

让我从我的代码开始:

这是我的项目结构:

SampleWPFMVVMMediatorApp
|
|--Data
|  |--MenuItems.xml
|
|--Extensions
|  |--MediatorX
|  |  |--IColleague.cs
|  |  |--Mediator.cs
|  |  |--Messages.cs
|  |  |--MultiDictionary.cs
|  |--ViewModelBase.cs
|
|--Models
|  |--MenuItem.cs
|
|--ViewModels
|  |--MainWindowViewModel.cs
|  |--ParentMenuViewModel.cs
|  |--ChildMenuViewModel.cs
|  |--SamplePageViewModel.cs
|
|--Views
|  |--ParentMenuView.xaml
|  |--ChildMenuView.xaml
|  |--SamplePage.xaml
|
|--App.xaml
|--MainWindow.xaml
Run Code Online (Sandbox Code Playgroud)

码:

我将发布ViewModels和Models的代码以缩短问题的长度.

MenuItem.cs

public class MenuItem 
{
    public int Id { get; set; }
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

MainWindowViewModel.cs

public …
Run Code Online (Sandbox Code Playgroud)

c# wpf mvvm mediator

2
推荐指数
1
解决办法
2733
查看次数