我正在嘗試學習 XAML(沒有多大成功)——要溫柔。
我有一個切換按鈕、一個滑塊和一個按鈕。這就是我想要做的:
- 當滑塊的值改變時,切換按鈕應該關閉——作業正常。
- 按下按鈕時,設定滑塊值并將切換按鈕保持在任何狀態 - 不起作用;按下按鈕后,(1)不再起作用。它的行為就像
IsChecked系結已清除。
理想情況下,我想用 XAML 撰寫所有內容,但我想這是不可能的。
// MainWindow.xaml.cs
public class ValueToFalse : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return false;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var saved = toggle.IsChecked;
slider.Value = 2;
toggle.IsChecked = saved;
}
}
<!--App.xaml-->
<local:ValueToFalse x:Key="ValueToFalse"/>
<!--MainWindow.xaml-->
<ToggleButton
Name="toggle"
Content="toggle"
HorizontalAlignment="Left"
Margin="479,64,0,0"
VerticalAlignment="Top"
Height="108"
Width="192"
IsChecked="{Binding Value, Mode=OneWay, ElementName=slider, Converter={StaticResource ValueToFalse} }"
/>
<Slider
Name="slider"
HorizontalAlignment="Left"
Margin="167,105,0,0"
VerticalAlignment="Top"
Width="233"
Height="35"
/>
<Button
Content="Button"
HorizontalAlignment="Left"
Margin="346,340,0,0"
VerticalAlignment="Top"
Click="Button_Click"
/>
uj5u.com熱心網友回復:
我不太明白你想要實作什么。但是,盡管如此,@Clemens 指出了一個明顯的錯誤 - 如果您需要分配一個 Dependency Property 值并阻止系結,那么系結必須在 TwoWay 或 OneWaySource 源的方向上。
由于您不需要為源分配值,但您需要將指向源的方向存盤在系結中,您可以通過實作轉換器來解決這個問題。
我展示了帶有標記擴展的轉換器的完整實作。這可能對您將來有用。
[ValueConversion(typeof(object), typeof(bool))]
public class ValueToFalseConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return false;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
// This value tells the binding that the result of the conversion should not be assigned.
return Binding.DoNothing;
}
private ValueToFalseConverter() { }
public static ValueToFalseConverter Instance { get; } = new ValueToFalseConverter();
}
[MarkupExtensionReturnType(typeof(ValueToFalseConverter))]
public class ValueToFalseExtension : MarkupExtension
{
public override object ProvideValue(IServiceProvider serviceProvider)
{
return ValueToFalseConverter.Instance ;
}
}
<ToggleButton
----------
----------
IsChecked="{Binding Value,
Mode=TwoWay,
ElementName=slider,
Converter={local:ValueToFalse}}"
/>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/532976.html
標籤:C#wpfxml
上一篇:如何使用Zxing條碼掃描器庫和Aforge網路攝像頭庫
下一篇:從物件函式更新背景關系
