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

3

我正在创建一个具有多语言支持的独立WPF应用程序。我已经找到了一些非常好的资源(主要在SO上),可以存储和根据需要访问字符串。这部分很简单易做,但是我对如何解决屏幕布局问题感到模糊不清。

我使用了一些自定义图像来为按钮等外观进行美化。例如,下面是一个带有文本的按钮:

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

替代文本

现在这里有带有另一种语言的文字的同样的按钮:

   <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
你应该发布定义样式SmallButtonBase的代码。解决方案将在该样式中。我想你在代码中有一个硬编码的宽度和高度,它们应该是“自动”。 - Matt Bridges
1个回答

2

尝试在内容呈现器周围放置一个视口,其固定宽度和高度与按钮图像匹配

就像这样

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

我认为你可以允许 WPF 调整字体大小以适应该位置。

轻松愉快。像魔法一样运作。布局基本上是:<Button> <Viewbox>
<TextBlock> 按钮内的字符串 </TextBlock> </Viewbox> </Button>
- BabaBooey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接