是否可以在转换器参数中使用 IValueConverter 的静态值?

发布于 2024-12-13 07:50:01 字数 491 浏览 3 评论 0原文

在 Silverlight 中,我有一个标准 IValueConverter,我想将可能的参数定义为 const 字符串。

public class BooleanConverter : IValueConverter
{
    public const string PARAMETER_ONE = "one";
    public const string PARAMETER_TWO  = "two";
...

然后我想在转换器参数中使用常量,例如:

    <TextBlock Text="{Binding Name, Converter={StaticResource BooleanConverter},
        ConverterParameter={StaticResource BooleanConvereter.PARAMETER_TWO}" />

这可能吗?如果是,正确的语法是什么?

In Silverlight, I have a standard IValueConverter where I want to define the possible parameters as const strings.

public class BooleanConverter : IValueConverter
{
    public const string PARAMETER_ONE = "one";
    public const string PARAMETER_TWO  = "two";
...

I would then like to use the constant within the Converter Parameter, something like:

    <TextBlock Text="{Binding Name, Converter={StaticResource BooleanConverter},
        ConverterParameter={StaticResource BooleanConvereter.PARAMETER_TWO}" />

Is this possible? If yes, what is the correct syntax?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

橘虞初梦 2024-12-20 07:50:02

您应该能够使用静态标记扩展:

<TextBlock Text="{Binding Name,Converter={StaticResource BooleanConverter},ConverterParameter={x:Static cnv:BooleanConverter.PARAMETER_ONE}}" />

请注意,x:Static 需要对类本身的引用,而不是对您的资源的引用。因此,您需要为其添加适当的 XML 命名空间前缀。

You should be able to use the Static markup extension:

<TextBlock Text="{Binding Name,Converter={StaticResource BooleanConverter},ConverterParameter={x:Static cnv:BooleanConverter.PARAMETER_ONE}}" />

Note that the x:Static needs a reference to the class itself, not your resource. Therefore you'll need to prefix it with the appropriate XML namespace prefix.

您的好友蓝忘机已上羡 2024-12-20 07:50:02

您可以同时使用参数和参数。示例:

<converters:VisibilityConverter x:Key="inversVisibConverter" Inverse="True"/>

 Visibility="{Binding ABoolValue, Mode=OneWay, Converter={StaticResource inversVisibConverter},ConverterParameter=abc}"

转换器(包含参数参数):

public sealed class VisibilityConverter : IValueConverter {

       public bool Inverse { get; set; }

       #region Implementation of IValueConverter
        object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {            
            Visibility visibility = Visibility.Visible;

            if (value is bool)
            {
                visibility = (bool) value ? Visibility.Visible : Visibility.Collapsed;
            }

            if( parameter != null )
            {
                //handle parameter here:

            }

            if (Inverse)
            {
                visibility = (visibility == Visibility.Visible) ? Visibility.Collapsed : Visibility.Visible;
            }

            return visibility;
        }

        object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
            if (!(value is Visibility)) {
                throw new ArgumentOutOfRangeException("value", "VisibilityConverter can only convert from Visibility");
            }

            if (targetType == typeof(bool)) {
                return ((Visibility)value == Visibility.Visible) ? true : false;
            }

            throw new ArgumentOutOfRangeException("targetType", "VisibilityConverter can only convert to Boolean");
        }
        #endregion
 }

You can use both parameter and argument. Sample:

<converters:VisibilityConverter x:Key="inversVisibConverter" Inverse="True"/>

 Visibility="{Binding ABoolValue, Mode=OneWay, Converter={StaticResource inversVisibConverter},ConverterParameter=abc}"

The Converter (contains both parameter and argument):

public sealed class VisibilityConverter : IValueConverter {

       public bool Inverse { get; set; }

       #region Implementation of IValueConverter
        object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {            
            Visibility visibility = Visibility.Visible;

            if (value is bool)
            {
                visibility = (bool) value ? Visibility.Visible : Visibility.Collapsed;
            }

            if( parameter != null )
            {
                //handle parameter here:

            }

            if (Inverse)
            {
                visibility = (visibility == Visibility.Visible) ? Visibility.Collapsed : Visibility.Visible;
            }

            return visibility;
        }

        object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
            if (!(value is Visibility)) {
                throw new ArgumentOutOfRangeException("value", "VisibilityConverter can only convert from Visibility");
            }

            if (targetType == typeof(bool)) {
                return ((Visibility)value == Visibility.Visible) ? true : false;
            }

            throw new ArgumentOutOfRangeException("targetType", "VisibilityConverter can only convert to Boolean");
        }
        #endregion
 }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文