我有一个MainPage.xaml
和SecondPage.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;
但这会分配一个新的空网格。我已经搜索了很多但没有结果
答案 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