2009-09-02 5 views
0

マイクスワンソンのillustrator to xaml converterを使って、私の画像の一部をxamlに変換しました。 convertは、画像を含むビューボックスを作成します。これらのビューボックスは自分のプログラムでリソースファイルを作成しました。xamlリソースを動的に表示しますか?

以下のコードは、私がやろうとしていることを示しています。Windings型のPrimaryWindingというenum変数を持つビューモデルがあります。 enumの値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

解決策を見つけましたが、まだそれほど好きではありません。 ContentBoxを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(); 
    } 
} 

グリッドセルは、今は少し厄介な検索ビューボックスを含むContentControlに含有ビューボックスを有しています。

関連する問題