1

这个问题很清楚。我的视图中有列表视图或列表框。如果我让我的屏幕更小,我希望我的文本(标签等)保持相同的大小。但是列表视图和列表框必须变得更小,最终带有滚动条?

我该怎么做呢?

谢谢

4

2 回答 2

0

ListBox 有一个内置的 ScrollViewer。

<ListBox ScrollViewer.VerticalScrollBarVisibility="Auto" />
于 2011-05-16T11:43:57.847 回答
0

这个问题很清楚。

嗯,不完全是。但我认为这就是你要找的。首先,创建一个接受 aDouble并返回其倒数的值转换器:

public class ReciprocalValueConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        Double? d = value as Double?;
        return (d == null || d == 0)
                   ? null
                   : 1/d;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

现在,您可以使用 和 缩放任何内容控件,ScaleTransform并使用 将ReciprocalValueConverter其中包含的任何单个元素保持为原始比例。因此,如果内容控件的比例加倍,您希望保持不变的内容的比例将减半。

LayoutTransform此示例通过将 分配给每个项目来显示缩放内容控件和“取消缩放”列表框中的项目:

<Window x:Class="ScaleTransformDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:ScaleTransformDemo="clr-namespace:ScaleTransformDemo" Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <ScaleTransformDemo:ReciprocalValueConverter x:Key="Reciprocal" />
    </Window.Resources>
    <DockPanel>
        <Slider x:Name="ScaleSlider"
                Orientation="Vertical"
                Minimum=".2"
                Maximum="4"
                Value="1" />
    <DockPanel>
        <DockPanel.LayoutTransform>
            <ScaleTransform ScaleX="{Binding ElementName=ScaleSlider, Path=Value}"
                            ScaleY="{Binding ElementName=ScaleSlider, Path=Value}" />
        </DockPanel.LayoutTransform>
        <Label DockPanel.Dock="Top">
            The content of this label scales with the slider.
        </Label>
        <Label DockPanel.Dock="Top">
            <Label.LayoutTransform>
                <ScaleTransform ScaleX="{Binding ElementName=ScaleSlider, Path=Value, Converter={StaticResource Reciprocal}}"
                                ScaleY="{Binding ElementName=ScaleSlider, Path=Value, Converter={StaticResource Reciprocal}}" />
            </Label.LayoutTransform>
            <Label.Content>
                This label's content stays the same size.
            </Label.Content>
        </Label>
        <Label DockPanel.Dock="Top">
            The ListBox below scales with the slider, too, but the ListBoxItems don't:
        </Label>
        <ListBox Height="50"
                 DockPanel.Dock="Top">
            <ListBox.ItemContainerStyle>
                <Style TargetType="ListBoxItem">
                    <Setter Property="LayoutTransform">
                        <Setter.Value>
                            <ScaleTransform ScaleX="{Binding ElementName=ScaleSlider, Path=Value, Converter={StaticResource Reciprocal}}"
                                            ScaleY="{Binding ElementName=ScaleSlider, Path=Value, Converter={StaticResource Reciprocal}}" />
                        </Setter.Value>
                    </Setter>
                </Style>
            </ListBox.ItemContainerStyle>
            <ListBoxItem>Item 1</ListBoxItem>
            <ListBoxItem>Item 2</ListBoxItem>
            <ListBoxItem>Item 3</ListBoxItem>
            <ListBoxItem>Item 4</ListBoxItem>
            <ListBoxItem>Item 5</ListBoxItem>
            <ListBoxItem>Item 6</ListBoxItem>
        </ListBox>
        <TextBlock DockPanel.Dock="Top" />
    </DockPanel>
</DockPanel>
</Window>
于 2011-05-16T19:30:06.937 回答