チェックボックスのチェック状態をStretch.Unfiorm
またはに変換する値コンバーターを作成しますStretch.None
。
public class StretchValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (bool)value ? Stretch.Uniform : Stretch.None;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value.Equals(Stretch.Uniform);
}
}
次に、XAML で次のようなことができます。
<Window.Resources>
<local:StretchValueConverter x:Key="StretchValueConverter" />
</Window.Resources>
<CheckBox x:Name="FitToScreen" />
<ScrollViewer VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto">
<Image Source="{Binding Picture}" Stretch="{Binding ElementName=FitToScreen Converter={StaticResource StretchValueConverter}, Path=Checked"/>
</ScrollViewer>
アップデート
また、スクロール ビューアーのコンテンツが境界を超えないように設定する必要がありHorizontalScrollBarVisibility
ます。これは、Checkbox.Checked プロパティをリッスンする別のコンバーターまたはスタイルで行うことができます。VerticalScrollBarVisibilty
Disabled
<Window x:Class="Overflow.Examples.Wpf.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<CheckBox x:Name="FitToScreen" Grid.Row="0" Content="Fit to screen" />
<ScrollViewer Grid.Row="1">
<Image Source="{Binding Picture}">
<Image.Style>
<Style TargetType="Image">
<Setter Property="Stretch" Value="None" />
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=FitToScreen, Path=IsChecked}" Value="True">
<Setter Property="Stretch" Value="Uniform" />
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
<ScrollViewer.Style>
<Style TargetType="ScrollViewer">
<Setter Property="HorizontalScrollBarVisibility" Value="Auto" />
<Setter Property="VerticalScrollBarVisibility" Value="Auto" />
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=FitToScreen, Path=IsChecked}" Value="True">
<Setter Property="HorizontalScrollBarVisibility" Value="Disabled" />
<Setter Property="VerticalScrollBarVisibility" Value="Disabled" />
</DataTrigger>
</Style.Triggers>
</Style>
</ScrollViewer.Style>
</ScrollViewer>
</Grid>
</Window>