<UserControl x:Class="Wabbajack.FilePicker" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:icon="http://metro.mahapps.com/winfx/xaml/iconpacks" xmlns:local="clr-namespace:Wabbajack" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" d:DesignHeight="35" d:DesignWidth="400" BorderBrush="{StaticResource DarkBackgroundBrush}" mc:Ignorable="d"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="36" /> </Grid.ColumnDefinitions> <Rectangle Grid.Column="0" Grid.ColumnSpan="2" x:Name="ErrorGlow" Fill="{StaticResource WarningBrush}" Opacity="0.3" Visibility="{Binding PickerVM.InError, Converter={StaticResource bool2VisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"> <Rectangle.Effect> <BlurEffect Radius="15" /> </Rectangle.Effect> <Rectangle.Style> <Style TargetType="Rectangle"> <Style.Triggers> <DataTrigger Binding="{Binding PickerVM.InError, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" Value="True"> <DataTrigger.EnterActions> <BeginStoryboard> <Storyboard> <ColorAnimation AutoReverse="True" RepeatBehavior="Forever" Storyboard.TargetProperty="(Rectangle.Fill).(SolidColorBrush.Color)" To="{StaticResource YellowDark}" Duration="0:0:0.8" /> </Storyboard> </BeginStoryboard> </DataTrigger.EnterActions> </DataTrigger> </Style.Triggers> </Style> </Rectangle.Style> </Rectangle> <Border Grid.Column="0" Grid.ColumnSpan="2" x:Name="BackgroundCornerFillIn" Margin="0,0,5,0" Background="{StaticResource TextBoxBackground}" CornerRadius="3" /> <TextBox Grid.Column="0" Margin="5,1,-2,1" VerticalContentAlignment="Center" Background="{StaticResource DarkBackgroundBrush}" Text="{Binding PickerVM.TargetPath, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Converter={StaticResource AbsolutePathToStringConverter}}" Visibility="{Binding PickerVM.ShowTextBoxInput, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" /> <Grid Grid.Column="1" HorizontalAlignment="Right" ClipToBounds="True"> <Border Margin="3,1,0,1" HorizontalAlignment="Right" Background="{StaticResource WarningBrush}" CornerRadius="3" ToolTip="{Binding PickerVM.ErrorTooltip, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"> <Border.Style> <Style TargetType="Border"> <Setter Property="Width" Value="25" /> <Style.Triggers> <DataTrigger Binding="{Binding PickerVM.InError, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" Value="True"> <DataTrigger.EnterActions> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetProperty="Width" To="33" Duration="0:0:0.1"> <DoubleAnimation.EasingFunction> <ExponentialEase EasingMode="EaseOut" /> </DoubleAnimation.EasingFunction> </DoubleAnimation> </Storyboard> </BeginStoryboard> </DataTrigger.EnterActions> <DataTrigger.ExitActions> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetProperty="Width" To="25" Duration="0:0:0.1"> <DoubleAnimation.EasingFunction> <ExponentialEase EasingMode="EaseOut" /> </DoubleAnimation.EasingFunction> </DoubleAnimation> </Storyboard> </BeginStoryboard> </DataTrigger.ExitActions> </DataTrigger> </Style.Triggers> </Style> </Border.Style> </Border> <Border Width="30" HorizontalAlignment="Left" Background="{StaticResource TextBoxBackground}" CornerRadius="3"> <Button Command="{Binding PickerVM.SetTargetPathCommand, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" ToolTip="Set target path"> <icon:PackIconMaterial Width="16" Height="12" Margin="4" Kind="DotsHorizontal" /> </Button> <Border.Effect> <DropShadowEffect BlurRadius="3" Direction="0" Opacity="0.5" ShadowDepth="2" /> </Border.Effect> </Border> </Grid> <Border Grid.Column="0" Grid.ColumnSpan="2" x:Name="ErrorBorder" Background="Transparent" BorderBrush="{StaticResource WarningBrush}" BorderThickness="1" CornerRadius="3" IsHitTestVisible="False" Visibility="{Binding PickerVM.InError, Converter={StaticResource bool2VisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"> <Border.Style> <Style TargetType="Border"> <Style.Triggers> <DataTrigger Binding="{Binding PickerVM.InError, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" Value="True"> <DataTrigger.EnterActions> <BeginStoryboard> <Storyboard> <ColorAnimation AutoReverse="True" RepeatBehavior="Forever" Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" To="{StaticResource YellowDark}" Duration="0:0:0.8" /> </Storyboard> </BeginStoryboard> </DataTrigger.EnterActions> </DataTrigger> </Style.Triggers> </Style> </Border.Style> </Border> </Grid> </UserControl>