我有一个“主框架”(它只包含CommandBar)和一些子框架,它们最初位于集线器中。当通过“OnNavigated ..”
点击一个集线器元素时,框架基本上会发生变化现在我有一些按钮(例如1和2),只有在选择某些帧时才能看到它们:
我用getter和setter方法尝试过它:
在Master-Frame代码方法中:
public static Visibility setVisibility
{
set { Button1.Visibility = value; }
}
并在后面的Frame1代码中:
MasterFrame.setVisibility = Visibility.Visible;
但是我从Button1获取错误“对象引用是......”,因为我必须使用“static”修饰符来访问Frame1中的按钮。
如何才能访问该按钮?
我甚至不知道我是否正在使用代码隐藏的“正确”方法,但MVVM似乎没用,因为这不是CRUD应用程序(没有用户输入的简单信息) 。)
答案 0 :(得分:3)
我甚至不知道我是否正在使用代码隐藏的“正确”方法,但MVVM似乎没用,因为这不是CRUD应用程序(没有用户输入的简单信息) 。)
不,MVVM很有用,在MVVM设计模式中,开发人员可以编写应用程序逻辑,设计人员可以创建UI。虽然您没有开发CRUD应用程序,但仍可以使用MVVM模式。
在UWP应用中,Data Binding非常强大。在这种情况下,您可以将数据绑定与Converter一起使用来解决您的问题。
我在这里写了一个示例,使用数据绑定来表示事件,并使用Converter
来判断Button
和AppBarButton
的可见性:
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.Resources>
<Converter:VisiableOrNot x:Key="cvt" />
<Converter:NaviButtonShowOrNot x:Key="btncvt" />
</Grid.Resources>
<CommandBar>
<CommandBar.Content>
<Grid>
<TextBlock Text="Master-Frame" FontSize="20" Margin="20,10" />
</Grid>
</CommandBar.Content>
<AppBarButton Icon="Accept" Label="appbarbutton" Visibility="{Binding ElementName=mainPageframe, Path=Content.BaseUri.AbsoluteUri, Converter={StaticResource cvt}}" />
<AppBarButton Icon="Cancel" Label="appbarbutton" Visibility="{Binding ElementName=mainPageframe, Path=Content.BaseUri.AbsoluteUri, Converter={StaticResource cvt}}" />
</CommandBar>
<Frame x:Name="mainPageframe" Margin="0,55">
<Hub x:Name="hub" SectionHeaderClick="{x:Bind MainPageViewModel.hub_SectionHeaderClick}">
<HubSection x:Name="image1" Header="Image1" Width="200" IsHeaderInteractive="True">
<DataTemplate>
<Grid>
<Image Source="Assets/111.png" Stretch="None" />
</Grid>
</DataTemplate>
</HubSection>
<HubSection x:Name="image2" Header="Image2" Width="200" IsHeaderInteractive="True">
<DataTemplate>
<Grid>
<Image Grid.Row="0" Source="Assets/222.png" Stretch="None" />
</Grid>
</DataTemplate>
</HubSection>
<HubSection x:Name="image3" Header="Image3" Width="200" IsHeaderInteractive="True">
<DataTemplate>
<Grid>
<Image Source="Assets/333.png" Stretch="None" />
</Grid>
</DataTemplate>
</HubSection>
</Hub>
</Frame>
<Button Content="Go Back" Click="{x:Bind MainPageViewModel.Button_Click}" Background="PaleGreen" VerticalAlignment="Bottom" Margin="50,20" Visibility="{Binding ElementName=mainPageframe, Path=Content.BaseUri.AbsoluteUri, Converter={StaticResource btncvt}}" />
</Grid>
VisiableOrNot
转换器的代码:
public class VisiableOrNot : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
Uri uri = new Uri(value.ToString());
if (uri != null)
{
if (uri.Equals("ms-appx:///View/Page3.xaml"))
{
return Visibility.Visible;
}
}
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
以下是我的演示的渲染图像,AppBarButton
仅在子帧的内容为Page3时才能看到。当它在MainPage上时,无法看到导航后退按钮:
这是我的demo,您可以下载并进行检查。
答案 1 :(得分:0)
要隐藏ui元素,只需执行以下操作:
this.MyComponent.Visibility = Visibility.Collapsed;
并使其可见:
this.MyComponent.Visibility = Visibility.Visible;