为什么我没有得到任何转换器?

时间:2011-06-16 07:22:44

标签: silverlight

我有单选按钮,我想在单选按钮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方法的第一行设置的断点上。

2 个答案:

答案 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>