我想将堆栈面板的可见性从“ visible.collaps”更改为“ visibility.visible”。但是我无法在它所在的主页上完成此操作。那是因为您需要登录到应用程序中,所以我想在Homepage.cs中进行操作,但是我该如何从那里更改stackpanel的值呢?我需要这样做,因为我的所有视图都加载在您可以在下面的代码中看到的框架中。
在下面找到拆分视图的代码
<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>
答案 0 :(得分:1)
如果您开始使用MVVM,这些任务将非常容易。下面是一个示例(作为一种介绍)。
对于每个不同的视图(UserControl
,数据模板,窗口等),您必须创建一个视图模型(VM)。视图模型可以具有复杂的关系。让我们创建一个:
public class ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
void OnPropertyChanged([CallerMemberName] string property = null) =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
bool _show;
public bool Show
{
get { return _show; }
set
{
_show = value;
OnPropertyChanged();
}
}
}
通常会有更多属性,它们将专门用于处理特定视图(例如,主窗口或某些用户控件中的所有内容),但暂时让它保持简单。
下一步,让我们重新创建您的问题:我们将提供StackPanel
和Frame
。框架部分将使用CheckBox
通过绑定到bool属性来更改可见性。并且StackPanel
将具有一些文本(以查看其是否有效)并将可见性绑定到相同的bool属性。
<Window ... >
<Window.Resources>
<BooleanToVisibilityConverter x:Key="converter"/>
<local:ViewModel x:Key="vm"/>
</Window.Resources>
<StackPanel>
<StackPanel Visibility="{Binding Show, Converter={StaticResource converter}}" DataContext="{StaticResource vm}">
<TextBlock Text="Some test"/>
</StackPanel>
<Frame>
<Frame.Content>
<CheckBox IsChecked="{Binding Show}" DataContext="{StaticResource vm}"/>
</Frame.Content>
</Frame>
</StackPanel>
</Window>
MVVM的整体思想是利用DataContext
继承:任何嵌套框架元素都将从其父级获取上下文。但是在此示例中,直接为每个设置。
视图模型的实例是在Windows资源中创建的。在应用程序级别上可能需要一个,甚至可能需要传递它(不确定框架内容的外观)。
转换器用于将bool
转换为Visibility
。
如果运行它,应该会看到类似以下内容的
:答案 1 :(得分:-2)
您可以使用一些事件。
在用于登录的子组件(例如类为LoginControl
)中,您声明事件:
public event EventHandler LoggedIn = delegate {};
您在主要组件中注册处理程序:
loginControl.LoggedIn += (s, e) => {
Company_StackPanel.Visibility = Visibility.Visible;
Event_StackPanel.Visibility = Visibility.Visible;
Promo_StackPanel.Visibility = Visibility.Visible;
};
在用户登录后,在您的LoginControl
中引发事件:
this.LoggedIn(this, EventArgs.Empty);