У меня есть две пользовательские кнопки в панели приложений, как показано ниже на прилагаемом скриншоте. Стили для этих кнопок написаны на странице App.xaml. Стили кнопок искажаются при изменении языка приложения/устройства. Сравнивая и анализируя различные сборки я подготовил ранее, я обнаружил, что стили работали отлично, прежде чем я представил ниже изменения переопределения языка культуры в App.xamlWinRT XAML AppBarButton Стиль пользовательского интерфейса в App Culture изменен
CultureInfo ci = new CultureInfo(currentAppLanguage);
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = ci.Name;
CultureInfo.DefaultThreadCurrentCulture = ci;
CultureInfo.DefaultThreadCurrentUICulture = ci;
Если значение currentAppLanguage является языком App/Устройство соответственно
Это обновление культуры важно, так как некоторые элементы управления, такие как Datepicker и т. Д., Полагаются на это изменение культуры для перевода на основе выбранного языка.
Ошибочное:
Правильно:
страница работает отлично с английской культурой. Но когда пользователь обновляет язык через приложение или на телефоне, стиль кнопки ломается.
Я переопределяю основную языковую культуру, когда приложение загружается на основе выбранного языка. Возможно ли изменение культуры повлиять на стили и элементы XAML?
Любые предложения очень помогут. Спасибо заранее.
Ниже панель управления кнопка приложения и стиль
Кнопка:
<AppBarButton
Visibility="{Binding CanReject, Converter={StaticResource BoolToVisibilityConverter}}"
x:Name="abReject"
Grid.Column="3"
Height="62"
Width="62"
Style="{StaticResource RejectAppBarButtonStyle}"
IsEnabled="{Binding LoadedApproval.ApprovalState, Converter={StaticResource StringComparerToBoolConverter}, ConverterParameter=Pending}"
BorderBrush="{StaticResource DictationGray}"
BorderThickness="2"
Foreground="White"
Background="{StaticResource ApprovalRejectRed}"
Margin="0,0">
<Interactivity:Interaction.Behaviors>
<Core:EventTriggerBehavior EventName="Click">
<Core:GoToStateAction StateName="Rejecting" UseTransitions="True"/>
</Core:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
</AppBarButton>
Стиль:
<Style x:Key="RejectAppBarButtonStyle" TargetType="AppBarButton">
<Setter Property="VerticalAlignment" Value="Stretch"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="AppBarButton" >
<Grid x:Name="RootGrid" Background="Transparent">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="ApplicationViewStates">
<VisualState x:Name="FullSize"/>
<VisualState x:Name="Compact">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="TextLabel">
<DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Width" Storyboard.TargetName="RootGrid">
<DiscreteObjectKeyFrame KeyTime="0" Value="60"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="PointerOver">
<Storyboard>
<RepositionThemeAnimation TargetName="RootGrid"/>
<DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="PointOverOverlay"/>
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard>
<PointerDownThemeAnimation TargetName="RootGrid"/>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Stroke" Storyboard.TargetName="OuterEllipse">
<DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ApprovalRejectRed}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Disabled">
<Storyboard>
<DoubleAnimation Duration="0" To="0.5" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="RootGrid"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="FocusStates">
<VisualState x:Name="Focused"/>
<VisualState x:Name="Unfocused"/>
<VisualState x:Name="PointerFocused"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Ellipse
x:Name="OuterEllipse"
Height="{TemplateBinding Height}"
Width="{TemplateBinding Width}"
Stroke="{TemplateBinding BorderBrush}"
StrokeThickness="2"
UseLayoutRounding="True">
</Ellipse>
<Grid>
<Ellipse
x:Name="BackgroundEllipse"
Height="{Binding Height, Converter={StaticResource ArithmeticOperationConverter}, ConverterParameter=0.78, RelativeSource={RelativeSource Mode=TemplatedParent}}"
Width="{Binding Width, Converter={StaticResource ArithmeticOperationConverter}, ConverterParameter=0.78, RelativeSource={RelativeSource Mode=TemplatedParent}}"
Fill="{TemplateBinding Background}"
UseLayoutRounding="True">
</Ellipse>
<Ellipse
x:Name="PointOverOverlay"
Opacity="0"
Height="{Binding Height, Converter={StaticResource ArithmeticOperationConverter}, ConverterParameter=0.78, RelativeSource={RelativeSource Mode=TemplatedParent}}"
Width="{Binding Width, Converter={StaticResource ArithmeticOperationConverter}, ConverterParameter=0.78, RelativeSource={RelativeSource Mode=TemplatedParent}}"
Fill="{StaticResource PointOverShade}"
UseLayoutRounding="True">
</Ellipse>
<Path
x:Name="Content"
Data="M1.5,1.5 L40.392,40.391 M1.5,40.391 L40.392,1.5"
VerticalAlignment="Center"
HorizontalAlignment="Center"
StrokeStartLineCap="Round"
Stretch="Uniform"
StrokeEndLineCap="Round"
Stroke="{TemplateBinding Foreground}"
StrokeThickness="3"
StrokeLineJoin="Round"
Height="{Binding Height, Converter={StaticResource ArithmeticOperationConverter}, ConverterParameter=0.33, RelativeSource={RelativeSource Mode=TemplatedParent}}"
Width="{Binding Width, Converter={StaticResource ArithmeticOperationConverter}, ConverterParameter=0.33, RelativeSource={RelativeSource Mode=TemplatedParent}}">
</Path>
</Grid>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Я не совсем уверен, как выглядит ваш стиль? – NotAGenie
Я не думаю, что изменение культуры повлияет на стили XAML и элементы, можете ли вы разместить свой код XAML в стиле этих двух кнопок? Здесь звучит странная проблема. Вы поместили свой стиль в файл ресурсов? –
@ GraceFeng-MSFT. Спасибо за ответ. Я добавил код выше в свой пост. Причина, по которой я указываю на культуру, заключается в том, что версия сборки без этого обновления культуры отлично работает для всех языков. – Sriram