2010-01-06 3 views
7

나는 ViewBox으로 완벽하게 조절되고 크기가 조정 된 TextBlock의 숫자를 가진 Viewbox을 가지고 있습니다. 이런 식으로 뭔가 : 사용자가 Viewbox 내용이 완벽하게 일치하도록 조정됩니다 크기를 조정WPF Viewbox에서 상수 FontSize를 유지하려면 어떻게해야합니까?

<Viewbox Stretch="Uniform"> 
    <Canvas Width="100" Height="100"> 
     <Ellipse Width="100" Height="100" Stroke="Black"/> 
     <TextBlock Width="100" TextAlignment="Center" FontSize="12">Top Center</TextBlock> 
    </Canvas> 
</Viewbox> 

합니다. 그러나 나는 Viewbox의 실제 크기에 관계없이 FontSize을 12로 유지하려고합니다.

어떻게하면됩니까? Resize 이벤트에 첨부하지 않고 XAML에서이 작업을 수행 할 수 있습니까?

답변

10

ViewBox은 글꼴 크기를 일정하게 유지하는 것을 허용하지 않습니다. 나는 TextBlock에서 Width 속성을 제거

<Grid> 
    <Viewbox Stretch="Uniform"> 
     <Canvas Width="100" Height="100"> 
      <Ellipse Width="100" Height="100" Stroke="Black"/> 
     </Canvas> 
    </Viewbox> 
    <TextBlock TextAlignment="Center" FontSize="12">Top Center</TextBlock> 
</Grid> 

주, 나는 그냥 그리드의 폭 스트레칭하자, 텍스트 정렬이 걸릴시키는 : 그런 일을 위해 당신은보기 상자 외부의 텍스트를 넣을 필요 센터링의 관심.

또는, 당신은 창의력과 ViewBoxActualWidthFontSize 속성을 결합하며, 예를 들어, 적절하게 조정하는 데 수 :

변환기 :

class ViewBoxConstantFontSizeConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (!(value is double)) return null; 
     double d = (double)value; 
     return 100/d * 12; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    } 
} 

사용법 :

<Window.Resources> 
    ... 
    <local:ViewBoxConstantFontSizeConverter x:Key="conv"/> 
</Window.Resources> 
... 
<Viewbox Name="vb" Stretch="Uniform"> 
    <Canvas Width="100" Height="100"> 
     <Ellipse Width="100" Height="100" Stroke="Black"/> 
     <TextBlock Width="100" TextAlignment="Center" 
        FontSize="{Binding ElementName=vb, 
             Path=ActualWidth, 
             Converter={StaticResource conv}}"> 
      Top Center 
     </TextBlock> 
    </Canvas> 
</Viewbox> 
+1

감사합니다. 나는 나의 예를 너무 단순화 시켰을 것이다. 내 텍스트의 위치를 ​​관리하기 위해 Viewbox가 필요하지만 FontSize는 아닙니다. – Hallgrim

+1

내 대답에 대한 대안을 추가했습니다. 시도해보십시오. 조금 과장되었지만 작동 할 수도 있습니다. –

+0

인상적입니다! 그게 효과가 있었지만 조금 더 단순하게하기를 바랬습니다. – Hallgrim

7

이것은 쉬운 수정 일 수도 있습니다.

<Viewbox StretchDirection="DownOnly" > 
    <Label Content="Enable" FontSize="10" FontStretch="Normal" /> 
</Viewbox> 
관련 문제