Silverlight 如何最好地使用动态文本调整XAML的大小

Silverlight 如何最好地使用动态文本调整XAML的大小,silverlight,xaml,dynamic,resize,Silverlight,Xaml,Dynamic,Resize,在我正在处理的Silverlight界面中,当堆栈面板的容器调整大小时,我需要调整其大小,以防止其中的文本被截断。所讨论的文本在运行时从语言文件中添加,具体取决于用户选择的语言。由于不同语言之间字符串的长度可能会有很大差异,我有点困惑于如何最好地处理这个问题。这就是它看起来的样子 讨论中的堆栈面板是彩色块,标签驱动、活动工作、可用性和中断是长度可以更改的字符串。XAML当前看起来是这样的 <StackPanel x:Name="StatusTotals" Grid.Row="1" Ori

在我正在处理的Silverlight界面中,当堆栈面板的容器调整大小时,我需要调整其大小,以防止其中的文本被截断。所讨论的文本在运行时从语言文件中添加,具体取决于用户选择的语言。由于不同语言之间字符串的长度可能会有很大差异,我有点困惑于如何最好地处理这个问题。这就是它看起来的样子

讨论中的堆栈面板是彩色块,标签驱动、活动工作、可用性和中断是长度可以更改的字符串。XAML当前看起来是这样的

<StackPanel x:Name="StatusTotals" Grid.Row="1" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0,5,0,5">
  <Border x:Name="DrivingBorder" Background="#80FF0000" BorderBrush="Black" BorderThickness="1" Opacity="1" CornerRadius="5,0,0,5" Margin="0,0,-1,0">
    <StackPanel Orientation="Vertical" Margin="5,1" VerticalAlignment="Center">
      <TextBlock Text="Driving" Tag="dttlDriving" HorizontalAlignment="Center"/>
      <TextBlock x:Name="DrivingDuration" Text="00:00" HorizontalAlignment="Center"/>
    </StackPanel>
  </Border>
  <Border x:Name="ActiveWorkBorder" Background="#8000FFFF" BorderBrush="Black" BorderThickness="1" Opacity="1" Margin="0,0,-1,0">
    <StackPanel Orientation="Vertical" Margin="5,1" VerticalAlignment="Center">
      <TextBlock Text="ActiveWork" Tag="dttlActiveWork" HorizontalAlignment="Center"/>
      <TextBlock x:Name="ActiveWorkDuration" Text="00:00" HorizontalAlignment="Center"/>
    </StackPanel>
  </Border>
  <Border x:Name="AvailabilityBorder" Background="#80FFFF00" BorderBrush="Black" BorderThickness="1" Opacity="1" Margin="0,0,-1,0">
    <StackPanel Orientation="Vertical" Margin="5,1" VerticalAlignment="Center">
      <TextBlock Text="Availability" Tag="dttlAvailability" HorizontalAlignment="Center"/>
      <TextBlock x:Name="AvailabilityDuration" Text="00:00" HorizontalAlignment="Center"/>
    </StackPanel>
  </Border>
  <Border x:Name="BreakBorder" Background="#8000FF00" BorderBrush="Black" BorderThickness="1" Opacity="1" CornerRadius="0,5,5,0">
    <StackPanel Orientation="Vertical" Margin="5,1" VerticalAlignment="Center">
      <TextBlock Text="Break" Tag="dttlBreak" HorizontalAlignment="Center"/>
      <TextBlock x:Name="BreakDuration" Text="00:00" HorizontalAlignment="Center"/>
    </StackPanel>
  </Border>
</StackPanel>

我希望能够减少这个面板的大小,如果它比上面画的标尺更宽,它已经按照我的要求动态调整大小,但是为了可读性,我希望标签下面的值保持在原来的大小


最好的方法是什么?我考虑过设置标签的FontSize属性或使用ScaleTransform,但我不确定哪种方法是最好的。有没有一种方法可以导出面板将采用的宽度,而无需实际更改字体大小,然后测试实际宽度?如果我能做到这一点,这将使这项任务更容易。

我不确定我是否完全理解你的问题

是否您的顶部父stackpanel的宽度限制为x,但由于标签的长度,其子级要求的总宽度大于x


在这种情况下,请查看在ViewBox控件中包装标签(您可以在Silverlight工具箱中找到它)此控件将缩放其内容以占据可用的大小。

很酷,这样做非常完美。这是我对Silverlight的部分问题;只是知道什么是可用的。