编辑
我正在调整问题以使其更加清楚。
我正在处理的应用程序具有登录屏幕(称为MainWindow
)和主应用程序(称为HomeWindow
)。
一旦用户输入其凭据,就会触发点击事件(为简化起见,我减少了代码)
private void BtnHello_Click(object sender, RoutedEventArgs e)
{
HomeWindow homeWindow = new HomeWindow();
MainWindow mainWindow = new MainWindow();
HRLevel1UserControl hRLevel1UserControl = new HRLevel1UserControl();
StudentsLevel1UserControl studentsLevel1UserControl = new StudentsLevel1UserControl();
homeWindow.ItemHR.Visibility = Visibility.Collapsed;
homeWindow.ItemStudents.Visibility = Visibility.Collapsed;
homeWindow.ItemClass.Visibility = Visibility.Collapsed;
homeWindow.ItemFinances.Visibility = Visibility.Collapsed;
homeWindow.ItemSchool.Visibility = Visibility.Collapsed;
homeWindow.ItemReports.Visibility = Visibility.Collapsed;
foreach (UserCategory userCategory in new CheckConnection().CheckPrivilege(LoggedInData.LoggedInUserId, LoggedInData.LoggedInstitutionId))
{
if (userCategory.Role == TeacherRole)
{
homeWindow.ItemStudents.Visibility = Visibility.Visible;
studentsLevel1UserControl.StudentManageBtn.Visibility = Visibility.Collapsed;
studentsLevel1UserControl.StudentReportBtn.Visibility = Visibility.Collapsed;
homeWindow.MenuBarSettings.Visibility = Visibility.Collapsed;
}
else
{
MessageBox.Show("-", MessageBoxButton.OK, MessageBoxImage.Stop);
return;
}
}
this.Close();
homeWindow.Show();
}
homeWindow
是主应用程序窗口,它是根据followinf XAML创建的:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid Grid.Row="2">
<Frame BorderBrush="DarkGray" BorderThickness="2"/>
<Grid Name="MainGrid" Background="White" Margin="140 5 5 5" HorizontalAlignment="Stretch"/>
<Grid Margin="4 4 0 5" Width="132" HorizontalAlignment="Left">
<Grid.Background>
<LinearGradientBrush EndPoint="0.5,2.5" StartPoint="1,0" MappingMode="RelativeToBoundingBox" SpreadMethod="Pad" Opacity="0.3">
<GradientStop Color="Black" Offset="1"/>
<GradientStop Color="White" Offset="0"/>
</LinearGradientBrush>
</Grid.Background>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="8*"/>
</Grid.RowDefinitions>
<Image Source="{DynamicResource Logo}" ToolTip="Sire Systems" HorizontalAlignment="Left"/>
<ListView x:Name="ListViewMain" Grid.Row="1" Background="Transparent" SelectionMode="Single" ScrollViewer.HorizontalScrollBarVisibility="Disabled" SelectionChanged="ListViewMain_SelectionChanged">
<ListView.BorderBrush>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black"/>
<GradientStop Color="White" Offset="1"/>
</LinearGradientBrush>
</ListView.BorderBrush>
<ListViewItem BorderThickness="0" Background="Transparent" Foreground="Transparent" Width="128" x:Name="ItemAccueil" HorizontalAlignment="Left" ToolTip="Accueil">
<StackPanel Orientation="Horizontal">
<Image Margin="5" Source="{DynamicResource Dashboard}"/>
<TextBlock Text="Accueil" VerticalAlignment="Center" FontSize="14" FontWeight="DemiBold" Foreground="#FF606060"/>
</StackPanel>
</ListViewItem>
<ListViewItem BorderThickness="0" Background="Transparent" Foreground="Transparent" Width="128" x:Name="ItemHR" HorizontalAlignment="Left" ToolTip="Ressources Humaines">
<StackPanel Orientation="Horizontal">
<Image Margin="5" Source="{DynamicResource HR}"/>
<TextBlock Text="RH" VerticalAlignment="Center" FontSize="14" FontWeight="DemiBold" Foreground="#FF606060"/>
</StackPanel>
</ListViewItem>
<ListViewItem BorderThickness="0" Background="Transparent" Foreground="Transparent" Width="128" x:Name="ItemStudents" HorizontalAlignment="Left" ToolTip="Gestion Etudiants">
<StackPanel Orientation="Horizontal">
<Image Margin="5" Source="{DynamicResource Students}"/>
<TextBlock Text="Etudiants" VerticalAlignment="Center" FontSize="14" FontWeight="DemiBold" Foreground="#FF606060"/>
</StackPanel>
</ListViewItem>
<ListViewItem BorderThickness="0" Background="Transparent" Foreground="Transparent" Width="128" x:Name="ItemClass" HorizontalAlignment="Left" ToolTip="Gestion Classes">
<StackPanel Orientation="Horizontal">
<Image Margin="5" Source="{DynamicResource Classes}"/>
<TextBlock Text="Classes" VerticalAlignment="Center" FontSize="14" FontWeight="DemiBold" Foreground="#FF606060"/>
</StackPanel>
</ListViewItem>
<ListViewItem BorderThickness="0" Background="Transparent" Foreground="Transparent" Width="128" x:Name="ItemFinances" HorizontalAlignment="Left" ToolTip="Gestion Finances">
<StackPanel Orientation="Horizontal">
<Image Margin="5" Source="{DynamicResource Finances}"/>
<TextBlock Text="Finances" VerticalAlignment="Center" FontSize="14" FontWeight="DemiBold" Foreground="#FF606060"/>
</StackPanel>
</ListViewItem>
<ListViewItem BorderThickness="0" Background="Transparent" Foreground="Transparent" Width="128" x:Name="ItemSchool" HorizontalAlignment="Left" ToolTip="Gestion au Quotidien">
<StackPanel Orientation="Horizontal">
<Image Margin="5" Source="{DynamicResource School}"/>
<TextBlock Text="Ecole" VerticalAlignment="Center" FontSize="14" FontWeight="DemiBold" Foreground="#FF606060"/>
</StackPanel>
</ListViewItem>
<ListViewItem BorderThickness="0" Background="Transparent" Foreground="Transparent" Width="128" x:Name="ItemReports" HorizontalAlignment="Left" ToolTip="Rapports Globaux">
<StackPanel Orientation="Horizontal">
<Image Margin="5" Source="{DynamicResource Reports}"/>
<TextBlock Text="Rapports" VerticalAlignment="Center" FontSize="14" FontWeight="DemiBold" Foreground="#FF606060"/>
</StackPanel>
</ListViewItem>
</ListView>
</Grid>
</Grid>
</Grid>
每个ListViewItem
根据以下代码在MainGrid
中加载用户控件:
private void ListViewMain_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
UserControl usc = null;
//MainGrid.Children.Clear();
try
{
switch (((ListViewItem)((ListView)sender).SelectedItem).Name)
{
case "ItemAccueil":
usc = new HomeUserControl();
MainGrid.Children.Add(usc);
break;
case "ItemHR":
usc = new UserControls.Home.HRLevel1UserControl() { VerticalAlignment = VerticalAlignment.Stretch };
MainGrid.Children.Add(usc);
break;
case "ItemStudents":
usc = new UserControls.Students.StudentsLevel1UserControl() { VerticalAlignment = VerticalAlignment.Stretch };
MainGrid.Children.Add(usc);
break;
case "ItemClass":
usc = new UserControls.Classes.ClassLevel1UserControl() { VerticalAlignment = VerticalAlignment.Stretch };
MainGrid.Children.Add(usc);
break;
case "ItemFinances":
usc = new UserControls.Finances.FinancesLevel1UserControl() { VerticalAlignment = VerticalAlignment.Stretch };
MainGrid.Children.Add(usc);
break;
case "ItemSchool":
usc = new UserControls.School.SchoolLevel1UserControl() { VerticalAlignment = VerticalAlignment.Stretch };
MainGrid.Children.Add(usc);
break;
case "ItemReports":
usc = new UserControls.Reports.ReportsLevel1UserControl() { VerticalAlignment = VerticalAlignment.Stretch };
MainGrid.Children.Add(usc);
break;
default:
usc = new HomeUserControl();
MainGrid.Children.Add(usc);
break;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
}
已加载的UserControl之一是学生usc,称为StudentsLevel1UserControl
(请参见部分代码:case "ItemStudents"
)。这是该用户控件的XAML:
<Grid Style="{StaticResource UpperGridStyle}">
<StackPanel Style="{StaticResource UscMenuBarStyle}">
<StackPanel.Resources>
<Style x:Key="MenuButtonStyle" TargetType="RadioButton" BasedOn="{StaticResource {x:Type ToggleButton}}">
<Setter Property="Background" Value="{x:Null}"/>
<Setter Property="BorderBrush" Value="{x:Null}"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="TextBlock.FontWeight" Value="DemiBold"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsChecked, RelativeSource={RelativeSource Self}}" Value="True">
<Setter Property="Background" Value="LightBlue"/>
<Setter Property="BorderBrush" Value="#FF005C8B"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="TextBlock.FontWeight" Value="Bold"/>
<Setter Property="TextBlock.Foreground" Value="#FF3284CB"/>
<Setter Property="TextBlock.FontSize" Value="12.5"/>
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Resources>
<RadioButton Uid="0" x:Name="StudentManageBtn" Width="120" Content="Gestion Etudiants" Height="Auto" Style="{StaticResource MenuButtonStyle}" Click="Button_Click"/>
<RadioButton Uid="1" x:Name="StudentRatingsBtn" Width="130" Content="Evaluations" Height="Auto" Style="{StaticResource MenuButtonStyle}" Click="Button_Click"/>
<RadioButton Uid="2" x:Name="StudentPassingBtn" Width="120" Content="Passage de Classe" Height="Auto" Style="{StaticResource MenuButtonStyle}" Click="Button_Click"/>
<RadioButton Uid="3" x:Name="StudentReportBtn" Width="120" Content="Rapports Etudiants" Height="Auto" Style="{StaticResource MenuButtonStyle}" Click="Button_Click"/>
</StackPanel>
<Grid x:Name="StudentsMain" Margin="5 55 5 5" VerticalAlignment="Stretch"/>
</Grid>
如您所见,此用户控件包含四个RadioButtons
,而我要实现的目标是将Visibility
的{{1}}和StudentManageBtn
设置为StudentReportBtn
基于登录的用户是否是老师。到目前为止,我使用的方法(在COllapsed
按钮中)无效。
为完整起见,这是用户控件的代码
BtnHello_Click
答案 0 :(得分:0)
我建议在相关的DataTrigger
中使用Style
。
要使其正常运行,请确保UserCategory
是MainWindow
的公共属性。
以下示例为RadioButton
定义了两种样式:现有样式MenuButtonStyle
,该样式适用于每个不受RadioButton
约束的Visibility
。
并且基于现有的MenuButtonStyle
,新的MenuButtonTeacherVisibiltyStyle
。应用于相关按钮后,如果用户角色为TeacherRole
,它将折叠它们:
MainWindow.xaml.cs
private void BtnHello_Click(object sender, RoutedEventArgs e)
{
HomeWindow homeWindow = new HomeWindow() {Role = this.UserCategory.Role};
this.Close();
homeWindow.Show();
}
StudentsLevel1UserControl.xaml
<UserControl>
<UserControl.Resources>
<Style x:Key="MenuButtonStyle" TargetType="RadioButton" BasedOn="{StaticResource {x:Type ToggleButton}}">
<Setter Property="Background" Value="{x:Null}"/>
<Setter Property="BorderBrush" Value="{x:Null}"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="TextBlock.FontWeight" Value="DemiBold"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsChecked, RelativeSource={RelativeSource Self}}" Value="True">
<Setter Property="Background" Value="LightBlue"/>
<Setter Property="BorderBrush" Value="#FF005C8B"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="TextBlock.FontWeight" Value="Bold"/>
<Setter Property="TextBlock.Foreground" Value="#FF3284CB"/>
<Setter Property="TextBlock.FontSize" Value="12.5"/>
</DataTrigger>
</Style.Triggers>
</Style>
<Style x:Key="MenuButtonTeacherVisibiltyStyle"
TargetType="RadioButton"
BasedOn="{StaticResource MenuButtonStyle}">
<Setter Property="Visibility" Value="Visible"/>
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=HomeWindow}, Path=Role}" Value="TeacherRole">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<StackPanel>
<RadioButton x:Name="StudentManageBtn" Style="{StaticResource MenuButtonTeacherVisibiltyStyle}" Click="Button_Click"/>
<RadioButton x:Name="StudentRatingsBtn" tyle="{StaticResource MenuButtonStyle}" Click="Button_Click"/>
<RadioButton x:Name="StudentPassingBtn" Style="{StaticResource MenuButtonStyle}" Click="Button_Click"/>
<RadioButton x:Name="StudentReportBtn" Style="{StaticResource MenuButtonTeacherVisibiltyStyle}" Click="Button_Click"/>
</StackPanel>
</UserControl>
备注
您必须调整/插入XAML名称空间以使其进行编译。