C# 报告具有锁定值的WPF控件的用户;这怎么会发生?
我有一个使用WPF和.NET4.0客户端配置文件创建的相对简单的程序。我使用了一种MVVM方法,在这种方法中,我拥有的视图背后的代码最少,绑定到相应视图模型上的属性;然后,这些属性根据需要访问模型。GUI包含复选框、滑块和其他必要的控件。滑块的最小值设置为0,最大值设置为1,较大变化设置为0.1,较小变化设置为0.05。这一切对我和大多数人都很好 不幸的是,一些用户报告了一些非常奇怪的问题。它们报告滑块已锁定为0或1的值,并且无法更改这些值。通常情况下,滑块的最小值为0,最大值为1,因此这些值可能是正确的(尽管它们很可能实际显示的值为0.5左右),但它们绝对应该是可调的!但是,我并没有将IsSnaptoticEnabled设置为;它的默认值为false。滑块绑定到视图模型上的十进制属性。我曾试图向这些用户询问更多信息,但不幸的是,很难与他们取得联系,因此我正试图自己解决这个问题 我正在运行64位Windows 7。我尝试通过更改视图模型进行实验,使滑块绑定到低于其最小值或高于其最大值的值,在这些情况下,滑块通过简单地显示最小值或最大值并允许更改来处理它。我尝试过通过更改视图模型进行实验,这样滑块就可以绑定到引发异常的属性,在这种情况下,滑块可以通过显示最小值并允许更改来很好地处理它。这对我来说意味着绑定(因此,视图模型和模型)不是问题所在,因此问题在事物的视图方面。我想这可能是因为没有应用样式的问题,但即使是未设置样式的滑块也可以正常工作并允许更改 无论我做什么,我都无法重现这些人报道的问题!因此,我来向你寻求帮助你能想出导致这种情况的原因吗?据我所知,我没有做任何不寻常的事情。我只是使用一个普通的WPF滑块控件并绑定到一个十进制属性 我确实知道,至少有一个用户遇到了这些问题,他们使用的是经典主题,我在我的程序中强制使用Aero主题,如果这有任何关联的话 下面是一些示例代码,但我不认为它会很有帮助 滑块绑定: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,因此这些值可
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上测试 你可以做以下事情来收集更多信息
<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);
}
}