Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 报告具有锁定值的WPF控件的用户;这怎么会发生?_C#_.net_Wpf_.net 4.0 - Fatal编程技术网

C# 报告具有锁定值的WPF控件的用户;这怎么会发生?

C# 报告具有锁定值的WPF控件的用户;这怎么会发生?,c#,.net,wpf,.net-4.0,C#,.net,Wpf,.net 4.0,我有一个使用WPF和.NET4.0客户端配置文件创建的相对简单的程序。我使用了一种MVVM方法,在这种方法中,我拥有的视图背后的代码最少,绑定到相应视图模型上的属性;然后,这些属性根据需要访问模型。GUI包含复选框、滑块和其他必要的控件。滑块的最小值设置为0,最大值设置为1,较大变化设置为0.1,较小变化设置为0.05。这一切对我和大多数人都很好 不幸的是,一些用户报告了一些非常奇怪的问题。它们报告滑块已锁定为0或1的值,并且无法更改这些值。通常情况下,滑块的最小值为0,最大值为1,因此这些值可

我有一个使用WPF和.NET4.0客户端配置文件创建的相对简单的程序。我使用了一种MVVM方法,在这种方法中,我拥有的视图背后的代码最少,绑定到相应视图模型上的属性;然后,这些属性根据需要访问模型。GUI包含复选框、滑块和其他必要的控件。滑块的最小值设置为0,最大值设置为1,较大变化设置为0.1,较小变化设置为0.05。这一切对我和大多数人都很好

不幸的是,一些用户报告了一些非常奇怪的问题。它们报告滑块已锁定为0或1的值,并且无法更改这些值。通常情况下,滑块的最小值为0,最大值为1,因此这些值可能是正确的(尽管它们很可能实际显示的值为0.5左右),但它们绝对应该是可调的!但是,我并没有将IsSnaptoticEnabled设置为;它的默认值为false。滑块绑定到视图模型上的十进制属性。我曾试图向这些用户询问更多信息,但不幸的是,很难与他们取得联系,因此我正试图自己解决这个问题

我正在运行64位Windows 7。我尝试通过更改视图模型进行实验,使滑块绑定到低于其最小值或高于其最大值的值,在这些情况下,滑块通过简单地显示最小值或最大值并允许更改来处理它。我尝试过通过更改视图模型进行实验,这样滑块就可以绑定到引发异常的属性,在这种情况下,滑块可以通过显示最小值并允许更改来很好地处理它。这对我来说意味着绑定(因此,视图模型和模型)不是问题所在,因此问题在事物的视图方面。我想这可能是因为没有应用样式的问题,但即使是未设置样式的滑块也可以正常工作并允许更改

无论我做什么,我都无法重现这些人报道的问题!因此,我来向你寻求帮助你能想出导致这种情况的原因吗?据我所知,我没有做任何不寻常的事情。我只是使用一个普通的WPF滑块控件并绑定到一个十进制属性

我确实知道,至少有一个用户遇到了这些问题,他们使用的是经典主题,我在我的程序中强制使用Aero主题,如果这有任何关联的话

下面是一些示例代码,但我不认为它会很有帮助

滑块绑定:

public decimal TestBinding {
    get { return this.Model.Test; }
    set {
        if (this.Model.Test == value) return;
        this.Model.Test = value;
        this.OnPropertyChanged("TestBinding");
    }
}
滑块控制:

<Slider Grid.Row="1"
        Grid.Column="1"
        Value="{Binding TestBinding}"
        Style="{StaticResource Slider0to1}" />

很难确定经典主题是否是问题所在,但我在各种主题和WPF方面遇到了很多问题。例如,使用Aero主题投影(到外部显示器)几乎总是最终会导致WPF出现一些奇怪的行为。我也有过类似的问题,似乎在某些视频卡上比在其他视频卡上表现得更明显。不要让我开始LiveMeeting和WPF:-)


一定要测试经典主题,并确保您也在XP上测试

你可以做以下事情来收集更多信息

  • 您的报告必须包括操作系统
  • 版本和屏幕大小
  • DPI信息,大多数用户设置高字体大小,这可能会将DPI更改为一点点,从而导致控件呈现略有不同
  • WPF版本,并检查默认依赖项属性值。您可以假设您已将ticks设置为false,但默认情况下可能为true,或者如果您的xaml正在其他应用程序中运行,并且资源可能会将其设置为true
  • 用户只能使用键盘,并检查这些控件的键盘行为
  • 用户可以双击,很多用户都有双击任何东西(按钮、链接)的习惯
  • 在较小的屏幕尺寸中,您的控件可能不在视图中,这是非常不可能的,因为您正在接收最大值。甚至在大屏幕上,更改文本大小可能会导致布局隐藏控件
  • <Style TargetType="Slider" BasedOn="{Utilities:StaticApplicationResource {x:Type Slider}}">
        <Setter Property="Margin" Value="0" />
        <Setter Property="VerticalAlignment" Value="Center" />
        <Setter Property="AutoToolTipPlacement" Value="TopLeft" />
        <Setter Property="AutoToolTipPrecision" Value="2" />
        <Setter Property="TickPlacement" Value="BottomRight" />
    </Style>
    
    <Style x:Key="Slider0to1" TargetType="Slider" BasedOn="{Utilities:StaticApplicationResource {x:Type Slider}}">
        <Setter Property="AutoToolTipPrecision" Value="2" />
        <Setter Property="Minimum" Value="0" />
        <Setter Property="Maximum" Value="1" />
        <Setter Property="TickFrequency" Value="0.1" />
        <Setter Property="SmallChange" Value="0.05" />
        <Setter Property="LargeChange" Value="0.1" />
    </Style>
    
    [MarkupExtensionReturnType(typeof(object))]
    public class StaticApplicationResource : MarkupExtension {
    
        public StaticApplicationResource(object resourceKey) {
            this.ResourceKey = resourceKey;
        }
    
        [ConstructorArgument("resourceKey")]
        public object ResourceKey { get; set; }
    
        public override object ProvideValue(IServiceProvider serviceProvider) {
            if (this.ResourceKey == null) return null;
            return Application.Current.TryFindResource(this.ResourceKey);
        }
    
    }