在WPF / XAML中使用多语言支持处理布局问题的最佳方法是什么?

时间:2010-04-23 16:01:32

标签: wpf xaml skin multilingual

我正在创建一个支持多语言的独立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自动处理所需的任何字体大小调整或缩进,这样我就不必为我支持的每种语言调整UI。

非常感谢任何见解!

P.S。这是SmallButtonBase的XAML。它基本上定义了按钮具有焦点或按下时发生的情况。每种情况都使用不同的图像。

<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 个答案:

答案 0 :(得分:2)

尝试在内容提供者周围放置一个视图框,其宽度和高度固定,与按钮的图像相匹配

像这样

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

我认为您可以允许WPF缩放字体以适合该位置。