2013-10-23 2 views
0

i는 다음과 같이 화상에 대해 정의 XAML있다 : 줌줌을 적용하고 wpf 이미지로도 바꿀 수 있습니까?

<ControlTemplate> 
       <Grid>     
        <Image x:Name="documentPage" Source="{Binding ImageSource}" 
          VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Stretch="Fill">  
         <Image.LayoutTransform> 
          <TransformGroup> 
           <ScaleTransform ScaleX="{Binding ScaleFactor}" ScaleY="{Binding ScaleFactor}"/> 
          </TransformGroup> 
         </Image.LayoutTransform> 
        </Image>      
       </Grid> 
      </ControlTemplate> 

과의 버튼 및 I는 (축소) 0.1 0.1 의해 scaleFactor와 (확대) 또는 감소를 증가 축소.

이제 이미지를 뒤집어서 적용하고 싶습니다 ... 수직 또는 수평으로 뒤집는 것처럼 .... 어떻게 할 수 있습니까? 감사합니다.

+0

. .. 나는 wpf에 새로운 ... 어떻게 변환기를 사용합니까? 다시 감사하십시오 ... – Andy

답변

4

LayoutTransform에 적용한 TransformGroup 안에 원하는만큼의 크기 조절 변형을 넣을 수 있습니다. 다른 변형을 속성에 바인딩 할 수 있습니다. 두 번째의

<Image.LayoutTransform> 
    <TransformGroup> 
     <ScaleTransform ScaleX="{Binding ScaleFactor}" ScaleY="{Binding ScaleFactor}"/> 
     <ScaleTransform ScaleX="-1" ScaleY="1"/> 
    </TransformGroup> 
</Image.LayoutTransform> 
대신 -1

1이 당신의 ViewModel의 속성에 결박 변환 제작 한 다음

(당신의 flipx 및 flipy 속성을 부울 경우 분명히 컨버터가 필요합니다) 부울 속성을 스케일로 변환하는 변환기를 사용하여 질문의 모든 기능을 보여주는 간단한 예제는 ScaleX 및 ScaleY를 변환합니다.

enter image description here

XAML

<Window x:Class="flipx.MainWindow" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:local="clr-namespace:flipx" 
      DataContext="{Binding RelativeSource={RelativeSource Self}}" 
      Title="MainWindow" Height="350" Width="525"> 
     <Grid> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="*"/> 
       <RowDefinition Height="30"/> 
      </Grid.RowDefinitions> 
      <Ellipse Grid.Row="0" Width="100" Height="100"> 
       <Ellipse.Fill> 
        <LinearGradientBrush > 
         <GradientStop Color="Red"/> 
         <GradientStop Color="#FF2300FF" Offset="1"/> 
        </LinearGradientBrush> 
       </Ellipse.Fill> 
       <Ellipse.LayoutTransform> 
        <TransformGroup> 
         <ScaleTransform ScaleX="{Binding ScaleFactor}" ScaleY="{Binding ScaleFactor}"/> 
         <ScaleTransform ScaleX="{Binding FlipX, Converter={local:BooleanToScaleConverter}}" ScaleY="{Binding FlipY, Converter={local:BooleanToScaleConverter}}"/> 
        </TransformGroup> 
       </Ellipse.LayoutTransform> 
      </Ellipse> 

      <StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Center"> 
       <CheckBox Margin="5" IsChecked="{Binding FlipX}">FlipX</CheckBox> 
       <CheckBox Margin="5" IsChecked="{Binding FlipY}">FlipY</CheckBox>   
       <Slider Minimum="0.001" Maximum="5" Value="{Binding ScaleFactor}" Width="150"/> 
      </StackPanel> 
     </Grid> 

    </Window> 

C#

당신은 항상 당신이 조금 정교한 수 ... 레이아웃의 규모 X/Y 속성이
+0

감사 앤디 변환 상실 될 수

using System; using System.Windows; using System.Windows.Data; using System.Windows.Markup; namespace flipx { public class BooleanToScaleConverter : MarkupExtension, IValueConverter { static BooleanToScaleConverter converter; public BooleanToScaleConverter() { } public override object ProvideValue(IServiceProvider serviceProvider) { if (converter == null) converter = new BooleanToScaleConverter(); return converter; } public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { bool boolValue = (bool)value; return boolValue ? -1 : 1; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } } public partial class MainWindow : Window { public double ScaleFactor { get { return (double)GetValue(ScaleFactorProperty); } set { SetValue(ScaleFactorProperty, value); } } public static readonly DependencyProperty ScaleFactorProperty = DependencyProperty.Register("ScaleFactor", typeof(double), typeof(MainWindow), new PropertyMetadata(1d)); public bool FlipX { get { return (bool)GetValue(FlipXProperty); } set { SetValue(FlipXProperty, value); } } public static readonly DependencyProperty FlipXProperty = DependencyProperty.Register("FlipX", typeof(bool), typeof(MainWindow), new PropertyMetadata(false)); public bool FlipY { get { return (bool)GetValue(FlipYProperty); } set { SetValue(FlipYProperty, value); } } public static readonly DependencyProperty FlipYProperty = DependencyProperty.Register("FlipY", typeof(bool), typeof(MainWindow), new PropertyMetadata(false)); public MainWindow() { InitializeComponent(); } } } 
user1202434

+0

정확히 일치하는 형식이없는 (또는 다른 조작을 원할 때)보기 모델의 속성에보기의 속성을 바인딩 할 때 변환기가 사용됩니다 않습니다, 그냥 뷰 모델 속성을 다른보기로 변환합니다. – Andy

+0

나는 한 번 이상 upvote 수 있습니다. 초보자를 도와 주신 것에 감사드립니다. 다시 한 번 감사드립니다 – user1202434

관련 문제