<UserControl x:Class="GSF.TimeSeries.UI.UserControls.SecurityUserControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:sys="clr-namespace:System;assembly=mscorlib" mc:Ignorable="d" d:DesignHeight="650" d:DesignWidth="850" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:uc="clr-namespace:GSF.TimeSeries.UI.UserControls" xmlns:tsfBinding="clr-namespace:GSF.TimeSeries.UI.Binding;assembly=GSF.TimeSeries.UI" Background="Transparent"> <UserControl.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="/GSF.TimeSeries.UI.WPF;Component/Resources/CommonResource.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </UserControl.Resources> <StackPanel Orientation="Vertical"> <StackPanel.Resources> <Style TargetType="TextBox"> <Setter Property="HorizontalAlignment" Value="Left" /> <Setter Property="VerticalAlignment" Value="Center" /> <Setter Property="Width" Value="{StaticResource ItemSize}" /> <Setter Property="Margin" Value="2" /> <Setter Property="Validation.ErrorTemplate"> <Setter.Value> <ControlTemplate> <Grid> <Polygon Points="0,0 10,0 0,10 0,0" HorizontalAlignment="Right" Fill="Red" FlowDirection="RightToLeft" /> <Border BorderBrush="Red" BorderThickness="1"> <AdornedElementPlaceholder Name="ControlWithError" /> </Border> </Grid> </ControlTemplate> </Setter.Value> </Setter> <Style.Triggers> <Trigger Property="Validation.HasError" Value="true"> <Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors).CurrentItem.ErrorContent}" /> </Trigger> </Style.Triggers> </Style> <Style TargetType="PasswordBox"> <Setter Property="HorizontalAlignment" Value="Left" /> <Setter Property="VerticalAlignment" Value="Center" /> <Setter Property="Width" Value="{StaticResource ItemSize}" /> <Setter Property="Margin" Value="2" /> </Style> <Style TargetType="TextBlock"> <Setter Property="Margin" Value="2" /> <Setter Property="TextAlignment" Value="Right" /> <Setter Property="HorizontalAlignment" Value="Left" /> <Setter Property="VerticalAlignment" Value="Center" /> </Style> <Style TargetType="CheckBox"> <Setter Property="Margin" Value="2"/> <Setter Property="VerticalAlignment" Value="Center"/> <Setter Property="HorizontalAlignment" Value="Left"/> </Style> <Style TargetType="ListBox"> <Setter Property="Width" Value="160" /> <Setter Property="SelectionMode" Value="Multiple"/> <Setter Property="Height" Value="130" /> </Style> <Style TargetType="Grid"> <Setter Property="Margin" Value="5,0,5,0"/> </Style> </StackPanel.Resources> <GroupBox x:Name="GroupBoxManageUsers"> <HeaderedContentControl.Header> <TextBlock Text="Manage User Accounts" FontWeight="Bold"/> </HeaderedContentControl.Header> <StackPanel Orientation="Vertical"> <ComboBox ItemsSource="{tsfBinding:Column Path=ItemsSource}" SelectedItem="{tsfBinding:Column Path=CurrentItem}" Width="250"> <ComboBox.ItemTemplate> <DataTemplate> <TextBlock Text="{tsfBinding:Column Path=Name}" TextAlignment="Left" /> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox> <Grid x:Name="GridManageUsers" DataContext="{Binding Path=CurrentItem, Mode=TwoWay}"> <Grid.BindingGroup > <BindingGroup Name="input"/> </Grid.BindingGroup> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <TextBlock Grid.Row="0" Grid.Column="0" Text="Authentication" /> <StackPanel Orientation="Horizontal" Grid.Row="0" Grid.Column="1" VerticalAlignment="Center"> <RadioButton x:Name="RadioButtonWindows" Content="Windows" IsChecked="{Binding Path=UseADAuthentication}" GroupName="Authentication" Margin="0,0,2,0" /> <RadioButton x:Name="RadioButtonDatabase" Content="Database" IsChecked="{Binding Path=UseADAuthentication, Converter={StaticResource NotConverter}}" GroupName="Authentication" /> </StackPanel> <StackPanel Orientation="Horizontal" Grid.Row="1" Grid.Column="0"> <TextBlock Text="Username" Style="{StaticResource RequiredLabel}"/> <TextBlock Style="{StaticResource RequiredMarker}" /> </StackPanel> <TextBox Grid.Row="1" Grid.Column="1" Text="{tsfBinding:Column Path=Name}" MaxLength="50"/> <StackPanel Orientation="Horizontal" Grid.Row="2" Grid.Column="0"> <TextBlock Text="Password" Style="{StaticResource RequiredLabel}"/> <TextBlock Style="{StaticResource RequiredMarker}" /> </StackPanel> <PasswordBox x:Name="TextBoxPassword" Grid.Row="2" Grid.Column="1" IsEnabled="{Binding ElementName=RadioButtonDatabase, Path=IsChecked}" /> <StackPanel Orientation="Horizontal" Grid.Row="0" Grid.Column="2"> <TextBlock Text="First Name" Style="{StaticResource RequiredLabel}"/> <TextBlock Style="{StaticResource RequiredMarker}" /> </StackPanel> <TextBox Grid.Row="0" Grid.Column="3" Text="{tsfBinding:Column Path=FirstName}" IsEnabled="{Binding ElementName=RadioButtonDatabase, Path=IsChecked}" MaxLength="50"/> <StackPanel Orientation="Horizontal" Grid.Row="1" Grid.Column="2"> <TextBlock Text="Last Name" Style="{StaticResource RequiredLabel}"/> <TextBlock Style="{StaticResource RequiredMarker}" /> </StackPanel> <TextBox Grid.Row="1" Grid.Column="3" Text="{tsfBinding:Column Path=LastName}" IsEnabled="{Binding ElementName=RadioButtonDatabase, Path=IsChecked}" MaxLength="50" /> <TextBlock Grid.Row="2" Grid.Column="2" Text="Password Expiry" /> <DatePicker Grid.Row="2" Grid.Column="3" SelectedDate="{tsfBinding:Column Path=ChangePasswordOn}" IsEnabled="{Binding ElementName=RadioButtonDatabase, Path=IsChecked}"/> <TextBlock Grid.Row="0" Grid.Column="4" Text="Phone"/> <TextBox Grid.Row="0" Grid.Column="5" Text="{tsfBinding:Column Path=Phone}" IsEnabled="{Binding ElementName=RadioButtonDatabase, Path=IsChecked}" MaxLength="50"/> <TextBlock Grid.Row="1" Grid.Column="4" Text="Email"/> <TextBox Grid.Row="1" Grid.Column="5" Text="{tsfBinding:Column Path=Email}" IsEnabled="{Binding ElementName=RadioButtonDatabase, Path=IsChecked}" MaxLength="256" /> <CheckBox Content="Locked Out" Grid.Row="2" Grid.Column="5" IsChecked="{tsfBinding:Column Path=LockedOut}" /> </Grid> <uc:DetailViewFooterUserControl DeleteCommand="{Binding DeleteCommand}" ClearCommand="{Binding ClearCommand}" SaveCommand="{Binding SaveCommand}" SaveEnabled="{tsfBinding:DataOperation GroupBoxManageUsers, Path=(Validation.HasError)}" /> </StackPanel> </GroupBox> <GroupBox x:Name="GroupBoxManageGroups"> <HeaderedContentControl.Header> <TextBlock Text="Manage User Groups" FontWeight="Bold"/> </HeaderedContentControl.Header> <StackPanel Orientation="Vertical"> <ComboBox ItemsSource="{tsfBinding:Column Path=ItemsSource}" SelectedItem="{tsfBinding:Column Path=CurrentItem}" Width="250"> <ComboBox.ItemTemplate> <DataTemplate> <TextBlock Text="{tsfBinding:Column Path=Name}" TextAlignment="Left" /> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox> <Grid x:Name="GridManageGroups" DataContext="{Binding Path=CurrentItem, Mode=TwoWay}" HorizontalAlignment="Left"> <Grid.BindingGroup > <BindingGroup Name="input"/> </Grid.BindingGroup> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <StackPanel Orientation="Horizontal" Grid.Row="0" Grid.Column="0"> <TextBlock Text="Name" Style="{StaticResource RequiredLabel}"/> <TextBlock Style="{StaticResource RequiredMarker}" /> </StackPanel> <TextBox Grid.Row="0" Grid.Column="1" Text="{tsfBinding:Column Path=Name}" MaxLength="50" Width="180"/> <TextBlock Grid.Row="1" Grid.Column="0" Text="Description" /> <TextBox Grid.Row="1" Grid.Column="1" Text="{tsfBinding:Column Path=Description}" TextWrapping="Wrap" Height="115" Width="180" ScrollViewer.VerticalScrollBarVisibility="Visible"/> <Grid Grid.Row="0" Grid.Column="2" Grid.RowSpan="2" Visibility="{Binding Path=DataContext.CanDelete, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=GroupBox}, Converter={StaticResource ObjectToVisibilityConverter}}"> <!--<Grid.Visibility> <Binding Path="DataContext.CanDelete" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=GroupBox}" Converter="{StaticResource ObjectToVisibilityConverter}"> <Binding.ConverterParameter> <sys:Boolean>True</sys:Boolean> </Binding.ConverterParameter> </Binding> </Grid.Visibility>--> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <TextBlock Grid.Column="0" Grid.ColumnSpan="3" Grid.Row="0" Text="Press and hold CTRL key to select multiple users from the list." FontSize="{StaticResource SmallerTextSize}" Foreground="Red" HorizontalAlignment="Center"/> <TextBlock Grid.Column="0" Grid.Row="1" Text="Member Users" HorizontalAlignment="Left" FontWeight="Bold"/> <TextBlock Grid.Column="2" Grid.Row="1" Text="Available Users" HorizontalAlignment="Left" FontWeight="Bold"/> <ListBox x:Name="ListBoxCurrentGroupUsers" Grid.Column="0" Grid.Row="2" ItemsSource="{Binding Path=CurrentUsers}" DisplayMemberPath="Value" SelectionMode="Extended" /> <StackPanel Orientation="Vertical" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center"> <Button Content=">>" Command="{Binding Path=DataContext.RemoveUserCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=GroupBox}}" CommandParameter="{Binding ElementName=ListBoxCurrentGroupUsers, Path=SelectedItems}" ToolTip="Remove Users" Width="Auto" Margin="2"/> <Button Content="<<" Command="{Binding Path=DataContext.AddUserCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=GroupBox}}" CommandParameter="{Binding ElementName=ListBoxPossibleGroupUsers, Path=SelectedItems}" ToolTip="Add Users" Width="Auto" Margin="2"/> </StackPanel> <ListBox x:Name="ListBoxPossibleGroupUsers" Grid.Column="2" Grid.Row="2" ItemsSource="{Binding Path=PossibleUsers}" DisplayMemberPath="Value" SelectionMode="Extended" /> <TextBlock x:Name="TextBlockGroupUsersMessage" Grid.Column="0" Grid.ColumnSpan="3" Grid.Row="3" Text="Changes Saved Successfully." Foreground="Navy" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="2" Visibility="Collapsed"/> </Grid> </Grid> <uc:DetailViewFooterUserControl DeleteCommand="{Binding DeleteCommand}" ClearCommand="{Binding ClearCommand}" SaveCommand="{Binding SaveCommand}" SaveEnabled="{tsfBinding:DataOperation GridManageGroups, Path=(Validation.HasError)}" HorizontalAlignment="Left" /> </StackPanel> </GroupBox> <GroupBox x:Name="GroupBoxManageRoles"> <HeaderedContentControl.Header> <TextBlock Text="Manage Application Roles" FontWeight="Bold"/> </HeaderedContentControl.Header> <StackPanel Orientation="Vertical"> <ComboBox ItemsSource="{tsfBinding:Column Path=ItemsSource}" SelectedItem="{tsfBinding:Column Path=CurrentItem}" Width="250"> <ComboBox.ItemTemplate> <DataTemplate> <TextBlock Text="{tsfBinding:Column Path=Name}" TextAlignment="Left" Padding="1" /> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox> <Grid x:Name="GridManageRoles" DataContext="{Binding Path=CurrentItem, Mode=TwoWay}"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <Grid Grid.Column="0" Grid.Row="0" HorizontalAlignment="Left"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <TextBlock Grid.Column="0" Grid.ColumnSpan="3" Grid.Row="0" Text="Press and hold CTRL key to select multiple users from the list." FontSize="{StaticResource SmallerTextSize}" Foreground="Red" HorizontalAlignment="Center" /> <TextBlock Grid.Column="0" Grid.Row="1" Text="Allowed Users" FontWeight="Bold" HorizontalAlignment="Left"/> <TextBlock Grid.Column="2" Grid.Row="1" Text="Available Users" FontWeight="Bold" HorizontalAlignment="Left"/> <ListBox x:Name="ListBoxCurrentRoleUsers" Grid.Column="0" Grid.Row="2" ItemsSource="{Binding Path=CurrentUsers}" DisplayMemberPath="Value" SelectionMode="Extended" /> <StackPanel Orientation="Vertical" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center"> <Button Content=">>" Command="{Binding Path=DataContext.RemoveUserCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=GroupBox}}" CommandParameter="{Binding ElementName=ListBoxCurrentRoleUsers, Path=SelectedItems}" ToolTip="Remove Users" Width="Auto" Margin="2"/> <Button Content="<<" Command="{Binding Path=DataContext.AddUserCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=GroupBox}}" CommandParameter="{Binding ElementName=ListBoxPossibleRoleUsers, Path=SelectedItems}" ToolTip="Add Users" Width="Auto" Margin="2"/> </StackPanel> <ListBox x:Name="ListBoxPossibleRoleUsers" Grid.Column="2" Grid.Row="2" ItemsSource="{Binding Path=PossibleUsers}" DisplayMemberPath="Value" SelectionMode="Extended" /> </Grid> <Grid Grid.Column="1" Grid.Row="0" HorizontalAlignment="Right"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <TextBlock Grid.Column="0" Grid.ColumnSpan="3" Grid.Row="0" Text="Press and hold CTRL key to select multiple groups from the list." FontSize="{StaticResource SmallerTextSize}" Foreground="Red" HorizontalAlignment="Center"/> <TextBlock Grid.Column="0" Grid.Row="1" Text="Allowed Groups" HorizontalAlignment="Left" FontWeight="Bold"/> <TextBlock Grid.Column="2" Grid.Row="1" Text="Available Groups" HorizontalAlignment="Left" FontWeight="Bold"/> <ListBox x:Name="ListBoxCurrentRoleGroups" Grid.Column="0" Grid.Row="2" ItemsSource="{Binding Path=CurrentGroups}" DisplayMemberPath="Value" SelectionMode="Extended" /> <StackPanel Orientation="Vertical" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center"> <Button Content=">>" Command="{Binding Path=DataContext.RemoveGroupCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=GroupBox}}" CommandParameter="{Binding ElementName=ListBoxCurrentRoleGroups, Path=SelectedItems}" ToolTip="Remove Users" Width="Auto" Margin="2"/> <Button Content="<<" Command="{Binding Path=DataContext.AddGroupCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=GroupBox}}" CommandParameter="{Binding ElementName=ListBoxPossibleRoleGroups, Path=SelectedItems}" ToolTip="Add Users" Width="Auto" Margin="2"/> </StackPanel> <ListBox x:Name="ListBoxPossibleRoleGroups" Grid.Column="2" Grid.Row="2" ItemsSource="{Binding Path=PossibleGroups}" DisplayMemberPath="Value" SelectionMode="Extended" /> </Grid> </Grid> </StackPanel> </GroupBox> </StackPanel></UserControl>
<UserControl x:Class="GSF.TimeSeries.UI.UserControls.SecurityUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d" d:DesignHeight="650" d:DesignWidth="850"
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:uc="clr-namespace:GSF.TimeSeries.UI.UserControls"
xmlns:tsfBinding="clr-namespace:GSF.TimeSeries.UI.Binding;assembly=GSF.TimeSeries.UI"
Background="Transparent">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/GSF.TimeSeries.UI.WPF;Component/Resources/CommonResource.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<StackPanel Orientation="Vertical">
<StackPanel.Resources>
<Style TargetType="TextBox">
<Setter Property="HorizontalAlignment" Value="Left" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Width" Value="{StaticResource ItemSize}" />
<Setter Property="Margin" Value="2" />
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<Grid>
<Polygon Points="0,0 10,0 0,10 0,0" HorizontalAlignment="Right" Fill="Red" FlowDirection="RightToLeft" />
<Border BorderBrush="Red" BorderThickness="1">
<AdornedElementPlaceholder Name="ControlWithError" />
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors).CurrentItem.ErrorContent}" />
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="PasswordBox">
<Setter Property="HorizontalAlignment" Value="Left" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Width" Value="{StaticResource ItemSize}" />
<Setter Property="Margin" Value="2" />
</Style>
<Style TargetType="TextBlock">
<Setter Property="Margin" Value="2" />
<Setter Property="TextAlignment" Value="Right" />
<Setter Property="HorizontalAlignment" Value="Left" />
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
<Style TargetType="CheckBox">
<Setter Property="Margin" Value="2"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
</Style>
<Style TargetType="ListBox">
<Setter Property="Width" Value="160" />
<Setter Property="SelectionMode" Value="Multiple"/>
<Setter Property="Height" Value="130" />
</Style>
<Style TargetType="Grid">
<Setter Property="Margin" Value="5,0,5,0"/>
</Style>
</StackPanel.Resources>
<GroupBox x:Name="GroupBoxManageUsers">
<HeaderedContentControl.Header>
<TextBlock Text="Manage User Accounts" FontWeight="Bold"/>
</HeaderedContentControl.Header>
<StackPanel Orientation="Vertical">
<ComboBox ItemsSource="{tsfBinding:Column Path=ItemsSource}" SelectedItem="{tsfBinding:Column Path=CurrentItem}" Width="250">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{tsfBinding:Column Path=Name}" TextAlignment="Left" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<Grid x:Name="GridManageUsers" DataContext="{Binding Path=CurrentItem, Mode=TwoWay}">
<Grid.BindingGroup >
<BindingGroup Name="input"/>
</Grid.BindingGroup>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="Authentication" />
<StackPanel Orientation="Horizontal" Grid.Row="0" Grid.Column="1" VerticalAlignment="Center">
<RadioButton x:Name="RadioButtonWindows" Content="Windows" IsChecked="{Binding Path=UseADAuthentication}" GroupName="Authentication" Margin="0,0,2,0" />
<RadioButton x:Name="RadioButtonDatabase" Content="Database" IsChecked="{Binding Path=UseADAuthentication, Converter={StaticResource NotConverter}}" GroupName="Authentication" />
</StackPanel>
<StackPanel Orientation="Horizontal" Grid.Row="1" Grid.Column="0">
<TextBlock Text="Username" Style="{StaticResource RequiredLabel}"/>
<TextBlock Style="{StaticResource RequiredMarker}" />
</StackPanel>
<TextBox Grid.Row="1" Grid.Column="1" Text="{tsfBinding:Column Path=Name}" MaxLength="50"/>
<StackPanel Orientation="Horizontal" Grid.Row="2" Grid.Column="0">
<TextBlock Text="Password" Style="{StaticResource RequiredLabel}"/>
<TextBlock Style="{StaticResource RequiredMarker}" />
</StackPanel>
<PasswordBox x:Name="TextBoxPassword" Grid.Row="2" Grid.Column="1" IsEnabled="{Binding ElementName=RadioButtonDatabase, Path=IsChecked}" />
<StackPanel Orientation="Horizontal" Grid.Row="0" Grid.Column="2">
<TextBlock Text="First Name" Style="{StaticResource RequiredLabel}"/>
<TextBlock Style="{StaticResource RequiredMarker}" />
</StackPanel>
<TextBox Grid.Row="0" Grid.Column="3" Text="{tsfBinding:Column Path=FirstName}" IsEnabled="{Binding ElementName=RadioButtonDatabase, Path=IsChecked}" MaxLength="50"/>
<StackPanel Orientation="Horizontal" Grid.Row="1" Grid.Column="2">
<TextBlock Text="Last Name" Style="{StaticResource RequiredLabel}"/>
<TextBlock Style="{StaticResource RequiredMarker}" />
</StackPanel>
<TextBox Grid.Row="1" Grid.Column="3" Text="{tsfBinding:Column Path=LastName}" IsEnabled="{Binding ElementName=RadioButtonDatabase, Path=IsChecked}" MaxLength="50" />
<TextBlock Grid.Row="2" Grid.Column="2" Text="Password Expiry" />
<DatePicker Grid.Row="2" Grid.Column="3" SelectedDate="{tsfBinding:Column Path=ChangePasswordOn}" IsEnabled="{Binding ElementName=RadioButtonDatabase, Path=IsChecked}"/>
<TextBlock Grid.Row="0" Grid.Column="4" Text="Phone"/>
<TextBox Grid.Row="0" Grid.Column="5" Text="{tsfBinding:Column Path=Phone}" IsEnabled="{Binding ElementName=RadioButtonDatabase, Path=IsChecked}" MaxLength="50"/>
<TextBlock Grid.Row="1" Grid.Column="4" Text="Email"/>
<TextBox Grid.Row="1" Grid.Column="5" Text="{tsfBinding:Column Path=Email}" IsEnabled="{Binding ElementName=RadioButtonDatabase, Path=IsChecked}" MaxLength="256" />
<CheckBox Content="Locked Out" Grid.Row="2" Grid.Column="5" IsChecked="{tsfBinding:Column Path=LockedOut}" />
</Grid>
<uc:DetailViewFooterUserControl DeleteCommand="{Binding DeleteCommand}" ClearCommand="{Binding ClearCommand}" SaveCommand="{Binding SaveCommand}"
SaveEnabled="{tsfBinding:DataOperation GroupBoxManageUsers, Path=(Validation.HasError)}" />
</StackPanel>
</GroupBox>
<GroupBox x:Name="GroupBoxManageGroups">
<HeaderedContentControl.Header>
<TextBlock Text="Manage User Groups" FontWeight="Bold"/>
</HeaderedContentControl.Header>
<StackPanel Orientation="Vertical">
<ComboBox ItemsSource="{tsfBinding:Column Path=ItemsSource}" SelectedItem="{tsfBinding:Column Path=CurrentItem}" Width="250">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{tsfBinding:Column Path=Name}" TextAlignment="Left" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<Grid x:Name="GridManageGroups" DataContext="{Binding Path=CurrentItem, Mode=TwoWay}" HorizontalAlignment="Left">
<Grid.BindingGroup >
<BindingGroup Name="input"/>
</Grid.BindingGroup>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" Grid.Row="0" Grid.Column="0">
<TextBlock Text="Name" Style="{StaticResource RequiredLabel}"/>
<TextBlock Style="{StaticResource RequiredMarker}" />
</StackPanel>
<TextBox Grid.Row="0" Grid.Column="1" Text="{tsfBinding:Column Path=Name}" MaxLength="50" Width="180"/>
<TextBlock Grid.Row="1" Grid.Column="0" Text="Description" />
<TextBox Grid.Row="1" Grid.Column="1" Text="{tsfBinding:Column Path=Description}" TextWrapping="Wrap" Height="115" Width="180" ScrollViewer.VerticalScrollBarVisibility="Visible"/>
<Grid Grid.Row="0" Grid.Column="2" Grid.RowSpan="2" Visibility="{Binding Path=DataContext.CanDelete, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=GroupBox}, Converter={StaticResource ObjectToVisibilityConverter}}">
<!--<Grid.Visibility>
<Binding Path="DataContext.CanDelete" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=GroupBox}" Converter="{StaticResource ObjectToVisibilityConverter}">
<Binding.ConverterParameter>
<sys:Boolean>True</sys:Boolean>
</Binding.ConverterParameter>
</Binding>
</Grid.Visibility>-->
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Grid.ColumnSpan="3" Grid.Row="0" Text="Press and hold CTRL key to select multiple users from the list." FontSize="{StaticResource SmallerTextSize}" Foreground="Red" HorizontalAlignment="Center"/>
<TextBlock Grid.Column="0" Grid.Row="1" Text="Member Users" HorizontalAlignment="Left" FontWeight="Bold"/>
<TextBlock Grid.Column="2" Grid.Row="1" Text="Available Users" HorizontalAlignment="Left" FontWeight="Bold"/>
<ListBox x:Name="ListBoxCurrentGroupUsers" Grid.Column="0" Grid.Row="2" ItemsSource="{Binding Path=CurrentUsers}" DisplayMemberPath="Value" SelectionMode="Extended" />
<StackPanel Orientation="Vertical" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center">
<Button Content=">>" Command="{Binding Path=DataContext.RemoveUserCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=GroupBox}}" CommandParameter="{Binding ElementName=ListBoxCurrentGroupUsers, Path=SelectedItems}" ToolTip="Remove Users" Width="Auto" Margin="2"/>
<Button Content="<<" Command="{Binding Path=DataContext.AddUserCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=GroupBox}}" CommandParameter="{Binding ElementName=ListBoxPossibleGroupUsers, Path=SelectedItems}" ToolTip="Add Users" Width="Auto" Margin="2"/>
</StackPanel>
<ListBox x:Name="ListBoxPossibleGroupUsers" Grid.Column="2" Grid.Row="2" ItemsSource="{Binding Path=PossibleUsers}" DisplayMemberPath="Value" SelectionMode="Extended" />
<TextBlock x:Name="TextBlockGroupUsersMessage" Grid.Column="0" Grid.ColumnSpan="3" Grid.Row="3" Text="Changes Saved Successfully." Foreground="Navy" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="2" Visibility="Collapsed"/>
</Grid>
</Grid>
<uc:DetailViewFooterUserControl DeleteCommand="{Binding DeleteCommand}" ClearCommand="{Binding ClearCommand}" SaveCommand="{Binding SaveCommand}"
SaveEnabled="{tsfBinding:DataOperation GridManageGroups, Path=(Validation.HasError)}" HorizontalAlignment="Left" />
</StackPanel>
</GroupBox>
<GroupBox x:Name="GroupBoxManageRoles">
<HeaderedContentControl.Header>
<TextBlock Text="Manage Application Roles" FontWeight="Bold"/>
</HeaderedContentControl.Header>
<StackPanel Orientation="Vertical">
<ComboBox ItemsSource="{tsfBinding:Column Path=ItemsSource}" SelectedItem="{tsfBinding:Column Path=CurrentItem}" Width="250">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{tsfBinding:Column Path=Name}" TextAlignment="Left" Padding="1" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<Grid x:Name="GridManageRoles" DataContext="{Binding Path=CurrentItem, Mode=TwoWay}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid Grid.Column="0" Grid.Row="0" HorizontalAlignment="Left">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Grid.ColumnSpan="3" Grid.Row="0" Text="Press and hold CTRL key to select multiple users from the list." FontSize="{StaticResource SmallerTextSize}" Foreground="Red" HorizontalAlignment="Center" />
<TextBlock Grid.Column="0" Grid.Row="1" Text="Allowed Users" FontWeight="Bold" HorizontalAlignment="Left"/>
<TextBlock Grid.Column="2" Grid.Row="1" Text="Available Users" FontWeight="Bold" HorizontalAlignment="Left"/>
<ListBox x:Name="ListBoxCurrentRoleUsers" Grid.Column="0" Grid.Row="2" ItemsSource="{Binding Path=CurrentUsers}" DisplayMemberPath="Value" SelectionMode="Extended" />
<StackPanel Orientation="Vertical" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center">
<Button Content=">>" Command="{Binding Path=DataContext.RemoveUserCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=GroupBox}}" CommandParameter="{Binding ElementName=ListBoxCurrentRoleUsers, Path=SelectedItems}" ToolTip="Remove Users" Width="Auto" Margin="2"/>
<Button Content="<<" Command="{Binding Path=DataContext.AddUserCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=GroupBox}}" CommandParameter="{Binding ElementName=ListBoxPossibleRoleUsers, Path=SelectedItems}" ToolTip="Add Users" Width="Auto" Margin="2"/>
</StackPanel>
<ListBox x:Name="ListBoxPossibleRoleUsers" Grid.Column="2" Grid.Row="2" ItemsSource="{Binding Path=PossibleUsers}" DisplayMemberPath="Value" SelectionMode="Extended" />
</Grid>
<Grid Grid.Column="1" Grid.Row="0" HorizontalAlignment="Right">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Grid.ColumnSpan="3" Grid.Row="0" Text="Press and hold CTRL key to select multiple groups from the list." FontSize="{StaticResource SmallerTextSize}" Foreground="Red" HorizontalAlignment="Center"/>
<TextBlock Grid.Column="0" Grid.Row="1" Text="Allowed Groups" HorizontalAlignment="Left" FontWeight="Bold"/>
<TextBlock Grid.Column="2" Grid.Row="1" Text="Available Groups" HorizontalAlignment="Left" FontWeight="Bold"/>
<ListBox x:Name="ListBoxCurrentRoleGroups" Grid.Column="0" Grid.Row="2" ItemsSource="{Binding Path=CurrentGroups}" DisplayMemberPath="Value" SelectionMode="Extended" />
<StackPanel Orientation="Vertical" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center">
<Button Content=">>" Command="{Binding Path=DataContext.RemoveGroupCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=GroupBox}}" CommandParameter="{Binding ElementName=ListBoxCurrentRoleGroups, Path=SelectedItems}" ToolTip="Remove Users" Width="Auto" Margin="2"/>
<Button Content="<<" Command="{Binding Path=DataContext.AddGroupCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=GroupBox}}" CommandParameter="{Binding ElementName=ListBoxPossibleRoleGroups, Path=SelectedItems}" ToolTip="Add Users" Width="Auto" Margin="2"/>
</StackPanel>
<ListBox x:Name="ListBoxPossibleRoleGroups" Grid.Column="2" Grid.Row="2" ItemsSource="{Binding Path=PossibleGroups}" DisplayMemberPath="Value" SelectionMode="Extended" />
</Grid>
</Grid>
</StackPanel>
</GroupBox>
</StackPanel>
</UserControl>