【问题标题】:How to bind stackpanel visibility property如何绑定堆栈面板可见性属性
【发布时间】:2026-01-31 20:50:01
【问题描述】:

嗨 我是silverlight 4的新手。 我的视图中有两个单选按钮,在 stackpanel1 中名为 Internal 和 External,它们绑定到我的视图模型。 在 stackpanel2 我有文本块和按钮。 现在,当我选择内部单选按钮 stackpanel2 时我需要的东西应该是可见的,而在外部选择时 stackpanel2 应该是不可见的。 那么我如何将 stackpanel2 可见性属性绑定到我的视图模型。 请尽快解决问题。

【问题讨论】:

  • 仅供参考:“尽快”在 SO 被认为是粗鲁的。这意味着在您的评估中,您的问题比其他问题更重要。

标签: silverlight silverlight-4.0


【解决方案1】:

@ anju 没问题,你必须添加一个新类,使用 IValueConverter 继承它,这将是你的布尔到可见性转换器,现在你必须将 StackPanel Visibility 属性与视图模型中的布尔属性绑定,如下所示:

<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:GreenScreenApp.classes" x:Class="GreenScreenApp.one" >
<UserControl.Resources>
    <local:VisibilityConverter x:Key="BoolToVisibilityConverter"/>
</UserControl.Resources>
<Grid DataContext="MyDataSource" x:Name="LayoutRoot" >
    <StackPanel x:Name="stackpanel2" Visibility="{Binding IsVisible, Converter={StaticResource BoolToVisibilityConverter}}">
    </StackPanel>
</Grid>

您应该在数据上下文中有一个名为“IsVisible”的属性。转换器将转换布尔值并返回可见性值。

转换器代码

    public class VisibilityConverter : IValueConverter
{

    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var v = value;

        if (v == "true")
            return "Visible";
        else
            return "Collapsed";

    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }

    #endregion
}

只是想让您知道,在我的情况下,转换器类位于项目根目录的“类”文件夹中。 希望它能解决你的问题。

【讨论】:

    【解决方案2】:

    您必须在数据模型中添加新的 Visibility 属性,然后将此属性绑定到 stackpanel Visibility 属性,此外您也可以将其与布尔属性绑定,但是您需要转换器。 silverlight 中的转换器将任何分配的值转换为属性类型的值。

    您可以在此处了解如何构建转换器。 http://weblogs.asp.net/dwahlin/archive/2009/08/15/so-what-s-a-silverlight-value-converter-anyway.aspx

    【讨论】:

    • 我没有得到你。你能帮我一个忙吗。请显示Convertor,xzml和viewmodel的编码。
    • @anuj:cmets 的文本限制为 600 个字符。这不是推特或短信。不鼓励使用“u”等缩略词而不是“you”。