在自定义控件模板中有一个复选框,在设计视图中如下所示:
XAML代码:
<CheckBox IsChecked="{Binding Fareklasse21}" VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Row="1" Grid.Column="1">
<CheckBox.Template>
<ControlTemplate>
<StackPanel Orientation="Vertical" VerticalAlignment="Center">
<Image Source="pack://application:,,,/Asd.WWs.Client.Wpf;component/Resources/ADR-M.png" Width="64" Height="64" SnapsToDevicePixels="True">
</Image>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay, RelativeSource={RelativeSource AncestorType={x:Type CheckBox}}}"></CheckBox>
<TextBlock>2.1</TextBlock>
</StackPanel>
</StackPanel>
</ControlTemplate>
</CheckBox.Template>
当我启动应用程序时,图像(原来是64x64px)会变形(并放大?)
可能是图像从Prism包装器继承了一些值吗?在进行实时检查时,我真的看不到任何有趣的事情:
以下是特定图片的属性:
答案 0 :(得分:3)
WPF图形系统使用device-independent units来启用分辨率和设备独立性。每个独立设备的像素都会自动按系统的每英寸点数(dpi)设置进行缩放。这为WPF应用程序提供了针对不同dpi设置的适当缩放,并使应用程序自动识别dpi。另请参阅wiki page。
这就是为什么如果你甚至为Image控件指定Stretch = None,你可能会注意到图像没有以预期的宽/高像素数出现。如果图像的分辨率(DPI)与当前系统DPI不匹配,则会发生这种情况。
从物理像素到DIP的转换使用以下公式。
DIPs = pixels /(SystemDPI / 96.0)
如果您想将DIP转换为“真实”像素,您可以使用下一个公式:
宽度(像素)=宽度(WPF单位)*(SystemDPI / 96)
高度(像素)=高度(WPF单位)*(SystemDPI / 96)
您可以在DIP, inches, centimeters or points中指定元素大小。但如果可能的话,最好使用矢量化图形。
如果您有SVG文件,可以通过nuget使用sharpvector框架:
Install-Package SharpVectors
所以有SvgViewbox在XAML中呈现SVG:
<UserControl ...
xmlns:svgc="http://sharpvectors.codeplex.com/svgc/"
...>
...
<svgc:SvgViewbox Margin="5" Height="20" Width="20" Stretch="Uniform" Source="/Resources/Icons/Sample.svg"/>
...
</UserControl>