wpf - 滚动/适合带有复选框的图像

标签 wpf xaml layout scrollview

我想显示图像并添加复选框“适合屏幕”-使图像适合可见区域。

为了使图像适合可见区域,我使用以下 xaml 片段:

<Image Source="{Binding Picture}" Stretch="Uniform"/>

要禁用适配并添加滚动,我使用以下 xaml 片段:

<ScrollViewer VerticalScrollBarVisibility="Auto" 
              HorizontalScrollBarVisibility="Auto">
    <Image Source="{Binding Picture}" Stretch="None"/>
</ScrollViewer>

问题是如何用滚动条将拟合尺寸和实际尺寸结合起来,并使用checkbox在两种状态之间切换?

更新:

问题在于代码 Image/@Stretch=Uniform行为方式与 Image/@Stretch=None 相同里面<ScrollViewer> 。在这两种情况下滚动都是可见的,并且图像以其实际大小显示。

详细信息。代码

<ScrollViewer VerticalScrollBarVisibility="Auto" 
              HorizontalScrollBarVisibility="Auto">
    <Image Source="{Binding Picture}" Stretch="Uniform" />
</ScrollViewer>

工作方式与

相同
<ScrollViewer VerticalScrollBarVisibility="Auto" 
              HorizontalScrollBarVisibility="Auto">
    <Image Source="{Binding Picture}" Stretch="None" />
</ScrollViewer>

最佳答案

创建一个值转换器,将复选框的选中状态转换为 Stretch.UnfiormStretch.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>

更新

您还需要将 Horizo​​ntalScrollBarVisibilityVerticalScrollBarVisibilty 设置为 Disabled 以强制滚动查看器的内容不超出边界。您可以使用另一个监听 Checkbox.Checked 属性的转换器或样式来执行此操作。

<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>

关于wpf - 滚动/适合带有复选框的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11583735/

相关文章:

.net - 打印 WPF 位图图像

visual-studio-2010 - 在XAML VS2010 XAML编辑器中替换标签

xaml - Xamarin 表单 StackLayout : How to set width/height of children to percentages

java - JPanel 中的 GridBagLayout JLabels 和 JTextAreas 组织

css - 保持图像水平对齐无间隙的最简单方法?

c# - WPF UserControl 无法在窗体外部绑定(bind)

c# - 在不改变外观的情况下禁用 ComboBox

wpf - 检测触摸键盘何时在 WPF 中打开

c# - 如何在运行时将动态资源分配给 WPF 代码中的按钮

java - Android:如何从布局文件自动生成Java代码?