其他页面中的XAML元素

时间:2014-05-27 17:06:52

标签: c# xaml windows-phone-8

我有一个MainPage.xamlSecondPage.xaml,MainPage有一个xaml <Grid x:Name="mGrid" />我要做的就是设置当用户按下SecondPage上的按钮时可见性折叠:

<Button x:Name="myButton1" Click="myButton1_Click" />

private void myButton1_Click( object sender, RoutedEventArgs e)
{
   mGrid.Visibility = Visibility.Collapsed;
}

或者也许以某种方式发送该按钮到MainPage并在那里处理。 在.cs中声明公共网格对我来说不是一个选项,因为我已经在Grid中有很多对象。我曾经尝试过像:

var pointer = new MainPage();
pointer.mGrid.Visibility = Visibility.Collapsed;

但这会分配一个新的空网格。我已经搜索了很多但没有结果

2 个答案:

答案 0 :(得分:1)

绑定到MainPage.xaml的viewmodel可以具有类似

的属性
private bool _isGridVisible;
    public bool IsGridVisible
    {
        get { return this._isGridVisible; }
        set
        {
            if (value != this._isGridVisible)
            {
                this._isGridVisible = value;
                this.RaisePropertyChanged("IsGridVisible");
            }
        }
    }

并以Visibility="{Binding Path=IsGridVisible, Converter={StaticResource VisibilityConverter}}"

绑定到网格

将此viewmodel对象作为构造函数值传递给SecondPage.xaml,并在按钮单击时设置IsGridVisible = false

你可以使用如下所示的通用转换器功能将boolen转换为可见性。

 public class BooleanVisibilityConverter : IValueConverter
 {
    private const string REVERSE = "Reverse";

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (targetType != typeof(Visibility)) throw new InvalidOperationException();

        // reverse
        if (parameter != null && parameter.ToString().Equals(REVERSE, StringComparison.InvariantCultureIgnoreCase))
        {
            return (((bool)value) ? Visibility.Collapsed : Visibility.Visible);
        }
        else
        {
            return (((bool)value) ? Visibility.Visible : Visibility.Collapsed);
        }
    }
}

答案 1 :(得分:0)

如果我理解正确,您希望根据第二页中的选择隐藏第一页上的控件。

考虑这个问题的方法就像是在构建网页。

如果您有两个网页,他们彼此不了解。它们只存在于客户机上。他们可以在导航时在彼此之间传递数据,但最终只是静态显示的页面。

所以你想做的是&#34;缓存&#34;第二页的设置,以便第一页检索它们。

这可以通过多种方式完成。

如果您只传递几个变量,那么您可以在导航网址

中执行此操作

&#34; MainPage.xaml中hideButton =真安培; hideTextblock =假&#34; ECT

如果您想传递大量设置,我建议将设置对象序列化到手机存储。

我在S.O。

上写了很多关于这个主题的文章

您可以获取我制作的DLL以及如何使用它的文档here