我有一个主程序窗口,底部有一排快捷按钮。我正在尝试通过使用Visibility
的单独Settings
窗口使这些CheckBoxes
可选,然后将该状态存储在程序的UserSettings
中,以便在打开时再次记住以前的设置。我找到并使用IValueConverter
来实现这一点,我知道Setting
已保存,因为CheckBox
本身保留了它的值。
问题是点击CheckBox
不会影响按钮的Visibility
。它在Settings
窗口本身内工作,但我似乎无法弄清楚如何使它在不同的窗口之间工作。
我尝试过同时实施UpdateSourceTrigger
& NotifyOnSourceUpdated
标志无济于事。任何人都可以看到问题吗?
主窗口XAML
<WrapPanel.Resources>
<main:BooleanToHiddenVisibility x:Key="boolToVis" />
</WrapPanel.Resources>
<ToggleButton Name="alwaysOnTop" Checked="alwaysOnTop_Checked"
Style="{StaticResource ShortcutToggleStyle}" Unchecked="alwaysOnTop_Unchecked"
Visibility="{Binding Source=main:Properties.Settings.Default, Path=pinShow, Converter={StaticResource boolToVis}, Mode=TwoWay}" >
<Image SnapsToDevicePixels="True" Source="Images/pushpin.png"
ToolTip="Always on Top" />
</ToggleButton>
设置窗口XAML
<CheckBox Name="pinDisable" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Center"
IsChecked="{Binding Source={x:Static main:Properties.Settings.Default}, Path=pinShow, Mode=TwoWay}"
Checked="pinDisable_Checked" Unchecked="pinDisable_Unchecked"/>
转换代码背后
public class BooleanToHiddenVisibility : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Visibility rv = Visibility.Visible;
try
{
var x = bool.Parse(value.ToString());
if (x)
{
rv = Visibility.Visible;
}
else
{
rv = Visibility.Collapsed;
}
}
catch (Exception)
{
}
return rv;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value;
}
}