我使用Mike Swanson的illustrator to xaml converter将我的一些图像转换为xaml。 转换创建一个包含图像的视图框。这些视图框我在我的程序中创建了资源文件。
下面的代码展示了我正在尝试做的事情:我有一个viewmodel,它有一个名为PrimaryWinding的枚举变量,类型为Windings。枚举的值PrimD和PrimY选择资源中的相应PrimD和PrimY xaml文件。
<UserControl.Resources>
<DataTemplate x:Key="PrimTrafo" DataType="{x:Type l:Windings}">
<Frame Source="{Binding}" x:Name="PART_Image" NavigationUIVisibility="Hidden">
<Frame.LayoutTransform>
<ScaleTransform ScaleX="0.5" ScaleY="0.5"/>
</Frame.LayoutTransform>
</Frame>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding}" Value="PrimD">
<Setter TargetName="PART_Image" Property="Source" Value="Resources\PrimD.xaml" />
</DataTrigger>
<DataTrigger Binding="{Binding}" Value="PrimY">
<Setter TargetName="PART_Image" Property="Source" Value="Resources\PrimY.xaml" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</UserControl.Resources>
<!--The contentcontrol that holds the datatemplate defined above-->
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="1*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<ContentControl Grid.Column="0" Content="{Binding PrimaryWinding}" ContentTemplate="{StaticResource PrimTrafo}"/>
</Grid>
此代码有效。只有我无法将图纸调整为网格单元的大小。我添加了ScaleTransform类来调整图像大小
框架是否是一个错误的类来保存图纸?
我应该使用ScaleTransform类将绘图大小调整为单元格的大小吗?我怎么能动态地做到这一点?
答案 0 :(得分:0)
我找到了一个有效的解决方案,但我仍然不喜欢它。如果我将ContentControl放在Viewbox中,它会将内容调整为网格单元格的大小。 这也适用于我的第一条消息中的代码。我还尝试了另一种解决方案,即构建一个基于枚举值创建视图的转换器 我仍然希望有人知道更好的解决方案吗?
<Viewbox Grid.Column="0" Stretch="Fill">
<ContentControl Content="{Binding PrimaryWinding, Converter={StaticResource viewboxConverter}}"/>
</Viewbox>
视图框转换器枚举值的代码:
[ValueConversion(typeof(Windings), typeof(Viewbox))]
public sealed class WindingsToViewboxConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
try
{
string source=null;
switch ((Windings)value)
{
case Windings.PrimD:
source = Properties.Resources.PrimD;
break;
case Windings.PrimY:
source =Properties.Resources.PrimY;
break;
default:
break;
}
Viewbox viewbox = (Viewbox)XamlReader.Parse(source);
return viewbox;
}
catch
{
return new Viewbox();
}
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
网格单元格现在有一个包含内容控件的视图框,其中包含一个视图框,我觉得有点尴尬。