【发布时间】:2018-11-26 11:00:32
【问题描述】:
我想将堆栈面板的可见性从 visibility.Collapsed 更改为 visibility.visible。但我不能在它所在的主页上做到这一点。那是因为您需要在应用程序中登录,所以我想在 Homepage.cs 中执行此操作,但是如何从那里更改堆栈面板的值?我需要这样做,因为我所有的视图都加载在框架中,您可以在下面的代码中看到。
下面是拆分视图的代码
<SplitView x:Name="mySplitView" IsPaneOpen="False" DisplayMode="CompactInline">
<SplitView.Pane>
<StackPanel Background="Gray" Tapped="StackPanel_Tapped">
<Button FontFamily="Segoe MDL2 Assets" Content="" Click="Menu_Button_Click" Width="50" Height="50" />
<StackPanel Orientation="Horizontal" Tapped="Home_StackPanel_Tapped">
<Button FontFamily="Segoe MDL2 Assets" Content="" Width="50" Height="50" />
<TextBlock Text="Home" FontSize="18" VerticalAlignment="Center" Margin="5,0,0,0"/>
</StackPanel>
<Line X1="0" X2="0" Y1="5" Y2="5" StrokeThickness="1.5" Stretch="UniformToFill" Height="10" />
<StackPanel Orientation="Horizontal" Tapped="Company_StackPanel_Tapped" Visibility="Collapsed">
<Button FontFamily="Segoe MDL2 Assets" Content="" Width="50" Height="50"/>
<TextBlock Text="Bedrijven" FontSize="18" VerticalAlignment="Center" Margin="5,0,0,0"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Tapped="Event_StackPanel_Tapped" Visibility="Collapsed">
<Button FontFamily="Segoe MDL2 Assets" Content="" Width="50" Height="50"/>
<TextBlock Text="Evenementen" FontSize="18" VerticalAlignment="Center" Margin="5,0,0,0"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Tapped="Promo_StackPanel_Tapped" Visibility="Collapsed">
<Button FontFamily="Segoe MDL2 Assets" Content="" Width="50" Height="50" />
<TextBlock Text="Promoties" FontSize="18" VerticalAlignment="Center" Margin="5,0,0,0"/>
</StackPanel>
<Line X1="0" X2="0" Y1="5" Y2="5" StrokeThickness="1.5" Stretch="UniformToFill" Height="10"/>
<StackPanel Orientation="Horizontal" Tapped="Login_StackPanel_Tapped">
<Button FontFamily="Segoe MDL2 Assets" Content="" Width="50" Height="50" />
<TextBlock Text="Inloggen" FontSize="18" VerticalAlignment="Center" Margin="5,0,0,0"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Tapped="Registreer_StackPanel_Tapped" >
<Button FontFamily="Segoe MDL2 Assets" Content="" Width="50" Height="50" />
<TextBlock Text="Registreren" FontSize="18" VerticalAlignment="Center" Margin="5,0,0,0"/>
</StackPanel>
<StackPanel Orientation="Horizontal" x:Name="profielwijzigen" Tapped="Profiel_Wijzigen_StackPanel_Tapped" Visibility="Collapsed">
<Button FontFamily="Segoe MDL2 Assets" Content="" Width="50" Height="50" />
<TextBlock Text="Profiel Wijzigen" FontSize="18" VerticalAlignment="Center" Margin="5,0,0,0"/>
</StackPanel>
</StackPanel>
</SplitView.Pane>
<SplitView.Content>
<Frame Name="mainFrame">
Wait for redirect
</Frame>
</SplitView.Content>
</SplitView>
【问题讨论】:
-
您应该研究绑定 - 在您背后的代码中,您应该绑定到一些属性,这些属性封装了登录状态或任何决定堆栈面板可见性的属性。
-
你可以开始使用一点 MVVM。然后某些虚拟机只需要绑定两个属性:一个用于设置,另一个用于读取和更改可见性(通过数据触发器或转换器)。如果您想要仅查看解决方案,那么您可以使用常见的
RelativeSource AncestorTypeparent 并使用其属性之一(Tag? 如果这不起作用,自定义附加属性将)。在一个项目中,我为嵌套用户控件的一些复杂布局创建了一个自定义面板类public class MyGrid: Grid { }。 -
刚刚检查过,
RelativeSource不能在Frame.Content中工作。您必须使用代理或更好的 - 使用 MVVM 方法。 -
不使用框架和页面的众多原因之一。您应该在其中使用内容控件和用户控件。