gpt4 book ai didi

c# - 从隐藏代码更改 UWP 按钮的可见性

转载 作者:太空宇宙 更新时间:2023-11-03 21:13:24 25 4
gpt4 key购买 nike

我有一个“主框架”(仅包含 CommandBar)和一些子框架,它们最初位于一个集线器中。基本上,当通过“OnNavigated..”单击一个中心元素时,框架会发生变化。

现在我有一些按钮(例如 1 和 2)应该不可见,只有在选择了某些帧时才会显示:

enter image description here

我已经尝试使用 getter 和 setter 方法:

在 Master-Frame 代码方法中:

 public static Visibility setVisibility
{
set { Button1.Visibility = value; }
}

在后面的Frame1代码中:

MasterFrame.setVisibility = Visibility.Visible;

但我从 Button1 收到错误“对象引用是...”,因为我必须使用“static”修饰符才能从 Frame1 访问按钮。

我怎样才能访问该按钮?

我什至不知道我是否对代码隐藏使用了“正确”的方法,但是 MVVM 似乎没有用,因为这不是一个 CRUD 应用程序(没有用户输入的简单信息.)

最佳答案

I don't even know if I'm using the "right" approach with the code-behind, but the MVVM seems to be not useful, as this isn't a CRUD-application (simple information without user-input.)

不,MVVM 很有用,在 MVVM 设计模式中,开发人员可以编写应用程序逻辑,而设计人员可以创建 UI。尽管您不是在开发 CRUD 应用程序,但仍然可以使用 MVVM 模式。

在 UWP 应用中,Data Binding非常强大。在这种情况下,您可以将数据绑定(bind)与 Converter 一起使用。解决您的问题。

我这里写了一个sample使用Data Binding进行event,使用Converter判断ButtonAppBarButton的Visibility:

<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();
}
}

这是我的demo的效果图,AppBarButton只有在子框架的内容是Page3时才能看到。并且在 MainPage 上看不到导航后退按钮: enter image description here

这是我的 demo ,您可以下载并查看。

关于c# - 从隐藏代码更改 UWP 按钮的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36132690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com