【发布时间】:2017-09-06 10:35:59
【问题描述】:
我有一个绑定到滑块的文本框。
<TextBox Text="{Binding ElementName=maxValue, Path=Value, UpdateSourceTrigger=LostFocus}" TextAlignment="Center" VerticalContentAlignment="Center" Width="30" Height="25" BorderBrush="Transparent" PreviewKeyDown="TextBox_PreviewKeyDown"></TextBox>
<Slider Value="{Binding TotalSize}" Maximum="{Binding MaxMaxBackupSize, Mode=TwoWay}" Minimum="{Binding MinBackupSize}" TickPlacement="BottomRight" TickFrequency="2" IsSnapToTickEnabled="True" Name="maxValue"></Slider>
在用户选择某些内容后,我重新计算最大值 (MaxMaxBackupSize),因为它是一个绑定的属性,这应该会更新文本框和滑块,但是,由于某种原因 - 只有文本框值被更改,如果它更高然后最大值,降低到最大值。然而,滑块似乎没有被触动,我仍然可以随意移动它(这也改变了文本框中的文本......
我有以下相关属性:
private int totalSize;
public int TotalSize
{
get { return totalSize; }
set
{
if (value == totalSize)
return;
totalSize = value;
ConfigChanged = true;
ChangeIni = true;
}
}
public static int MaxMaxBackupSize { get; set; }
public static int MinBackupSize { get; set; }
用户按下控制杆后所做的改变是:
...
MaxMaxBackupSize = Convert.ToInt16(f / 1000000000)
TotalSize = (TotalSize < MaxMaxBackupSize) ? TotalSize : MaxMaxBackupSize;
...
UPDATE0:(顺便说一句,我正在使用一个名为 Fody.OnPropertyChanged 的 nuget 包,这让我无需提高 onpropertychanged - 所以这不是原因)
更新:当我的意思是滑块没有改变时,我应该清楚我在说什么 - 滑块确实移动了,但滑块的最大值仍然是旧的最大值。假设在最大值之前是 50,现在是 20,如果滑块之前是 30,那么它将切换到 20,但我仍然可以将它移动到 50。我希望最大值被限制在 20 . 不确定这是否可能。
UPDATE2:现在我找到了一种解决方法,检查该值是否大于属性中的最大值,如果是,它会弹出一个消息框,说明这是不可能的,然后返回。
【问题讨论】:
-
当您在 SO 上提问时,请提供一个最小的 repo:stackoverflow.com/help/mcve
-
缺少什么?也许只是我在用户选择某些东西后所做的更改......我会添加它。
-
@Sameed 阅读这篇文章 - 我正在使用一个特殊的包来为我实现它们,并且它工作得很好。这不是问题。
-
@Sameed 也许我的问题不清楚 - 请以粗体查看更新
-
您确定 PropertyChanged 是由 Fody 在静态属性上触发的吗?当 MaxMaxBackupSize 属性不是静态的(某种解决方法)时,您能否尝试它是否有效