ViewBox
sẽ không cho phép bạn giữ kích thước phông chữ không đổi, đó không phải là cách hoạt động. Bạn cần phải đặt nội dung bên ngoài giao diện hộp cho điều đó xảy ra:
<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>
Lưu ý rằng tôi loại bỏ các tài sản Chiều rộng từ TextBlock
, tôi chỉ để cho nó kéo dài cho chiều rộng của lưới điện, cho phép sự liên kết văn bản đi chăm sóc của các trung tâm.
Hoặc, bạn có thể nhận được sáng tạo và ràng buộc FontSize
tài sản cho ActualWidth
của ViewBox
và có nó có quy mô phù hợp, ví dụ:
Chuyển đổi:
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();
}
}
Cách sử dụng:
<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>
Nguồn
2010-01-06 15:25:32
Cảm ơn. Tôi đoán tôi đã đơn giản hóa ví dụ của tôi một chút quá nhiều. Tôi cần Viewbox để chăm sóc vị trí của văn bản của tôi, nhưng không phải là FontSize. – Hallgrim
Đã thêm một giải pháp thay thế cho câu trả lời của tôi, hãy dùng thử. Đó là một chút quá liều, nhưng nó có thể làm việc :) –
Ấn tượng! Điều đó có hiệu quả, nhưng tôi đã hy vọng điều gì đó đơn giản hơn một chút. – Hallgrim