Каков наилучший способ решения проблем макета с поддержкой нескольких языков в WPF / XAML? - PullRequest
2 голосов
/ 23 апреля 2010

Я создаю отдельное приложение WPF с поддержкой нескольких языков. Я нашел несколько отличных ресурсов (в основном по SO) о том, как хранить и получать доступ к строкам по мере необходимости. Эта часть довольно проста и выполнима, но я не совсем понимаю, как позаботиться о проблемах с разметкой экрана.

Я использую некоторые пользовательские изображения для создания обложки моего приложения для кнопок и т. Д. Например, вот кнопка с текстом внутри:

   <Button
        Canvas.Left="33"
        Canvas.Top="484"
        Style="{StaticResource SmallButtonBase}">
        <TextBlock                 
            FontSize="20" 
            FontWeight="Bold"        
            TextAlignment="Center" FontFamily="Helvetica">                                
            Enter
        </TextBlock>
    </Button>

alt text

Теперь вот та же кнопка с текстом на другом языке:

   <Button
        Canvas.Left="33"
        Canvas.Top="484"
        Style="{StaticResource SmallButtonBase}">
        <TextBlock                 
            FontSize="20" 
            FontWeight="Bold"        
            TextAlignment="Center" FontFamily="Helvetica">                                
            Enterenschtein
        </TextBlock>
    </Button>

alt text

Итак, мой вопрос: что является хорошим методом для предотвращения этой ситуации «переполнения». Я бы хотел, чтобы XAML позаботился о любом изменении размера или отступа шрифта, которые необходимы автоматически, чтобы мне не приходилось настраивать пользовательский интерфейс для каждого языка, который я поддерживаю.

Любое понимание приветствуется!

p.s. Вот XAML для SmallButtonBase. Это в основном определяет, что происходит, когда кнопка имеет фокус или нажата. Разное изображение используется для каждого случая.

<Style x:Key="SmallButtonBase" TargetType="Button">
    <Setter Property="FocusVisualStyle" Value="{x:Null}" />
    <Setter Property="SnapsToDevicePixels" Value="True" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Grid x:Name="Container">
                    <Image x:Name="Img" Source="/Resources/Elements/Buttons/10.png" Margin="6" />
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsKeyboardFocused" Value="True">
                        <Setter TargetName="Img" Property="Source" Value="/Resources/Elements/Buttons/11.png" />
                        <Setter TargetName="Img" Property="Margin" Value="0" />
                    </Trigger>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="IsKeyboardFocused" Value="True" />
                            <Condition Property="IsPressed" Value="True" />
                        </MultiTrigger.Conditions>
                        <Setter TargetName="Img" Property="Source" Value="/Resources/Elements/Buttons/12.png" />
                    </MultiTrigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

1 Ответ

2 голосов
/ 23 апреля 2010

Попробуйте установить область просмотра вокруг вашего contentpresenter с фиксированной шириной и высотой, соответствующей вашему изображению для кнопки

как это

<Viewbox Width="85" Height="85">
    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Viewbox>

Думаю, тогда вы можете позволить WPF масштабировать шрифт, чтобы он поместился в этом месте.

...