2009-09-02 2 views
0

Mike Swanson의 illustrator to xaml converter을 사용하여 일부 이미지를 xaml로 변환했습니다. convert는 이미지가 포함 된 뷰 박스를 만듭니다. 이 뷰 박스는 프로그램에서 리소스 파일을 만들었습니다.xaml 리소스를 동적으로 표시 하시겠습니까?

아래 코드는 내가하려고하는 것을 보여줍니다. Windings 유형의 PrimaryWinding이라는 열거 형 변수가있는 viewmodel이 있습니다. 열거 형의 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

해결 된 해결책을 찾았지만 여전히 많이 좋아하지 않습니다. 내 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(); 
    } 
} 

그리드 셀 지금은 조금 어색 찾아내는 뷰 박스를 포함하는 ContentControl을 포함하는 뷰 박스가 있습니다.