我有单选按钮,我想在单选按钮IsChecked状态和一些stackpanel的可见性之间定义绑定,所以我写了这个转换方法:
public class RadioBtnState2Visible : IValueConverter
{
// RadioBtn start => Visible / Hide
public object Convert( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture )
{
if( value == null )
return Visibility.Collapsed;
bool visibility = false;
bool.TryParse( value.ToString(), out visibility );
return visibility ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture )
{
throw new NotImplementedException();
//return ( ( Visibility )value ) == Visibility.Visible ? true : false;
}
}
xaml是
<local:PageEx.Resources>
<local:RadioBtnState2Visible x:Key="Convert" />
</local:PageEx.Resources>
<RadioButton x:Name="MyRadioBtn1" GroupName="group1" />
<RadioButton x:Name="MyRadioBtn2" GroupName="group1" />
<StackPanel Visibility="{Binding ElementName=MyRadioBtn1, Path=IsChecked, Converter={StaticResource Convert}}" />
现在,我没有看到任何转换火 - 我没有看到应用程序停止在我在convert方法的第一行设置的断点上。
答案 0 :(得分:2)
这是您上一个问题的副本,已经回答了。这是答案:
我让你的代码在一个测试项目中工作,只做了一点小改动。我使用以下语法将转换器作为页面资源:
<UserControl.Resources>
<local:RadioBtnState2Visible x:Key="Convert" />
</UserControl.Resources>
我还应该提一下,我必须在stackpanel中实际放置一些内容以查看更改,因为默认情况下它会折叠为任何内容:)我假设您实际上在实际的堆栈面板中有内容。
只是为了解释这里发生的事情。通过向资源声明添加“local:”,您实际上是封闭了Resource的一个实例,而不是更改当前资源。通过“转换”引用它不起作用,因为它无法找到它希望找到它的资源。
答案 1 :(得分:0)
仅供参考,已有BooleanToVisibilityConverter转换器可用:
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter1" />
</Window.Resources>