XAML,将宽度和高度属性绑定到其他控件的相同属性

9

我正在尝试创建一个反射效果,除了我必须硬编码一些值之外,它工作得很好。这是我的XAML:

 <Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="60"/>
        <RowDefinition />
        <RowDefinition Height="80"/>
    </Grid.RowDefinitions>
    <StackPanel Grid.Row="1" VerticalAlignment="Center">
        <UserControl x:Name="CurrentPresenter" />
        <Border Width="500" Height="200" >
            <Border.Background>
                <VisualBrush Visual="{Binding ElementName=CurrentPresenter}" >
                    <VisualBrush.Transform>
                        <TransformGroup>
                            <ScaleTransform ScaleX="1" ScaleY="-1" CenterX="500" CenterY="99" />
                        </TransformGroup>
                    </VisualBrush.Transform>
                </VisualBrush>
            </Border.Background>
            <Border.OpacityMask>
                    <LinearGradientBrush StartPoint="0,0" EndPoint="0,0.6">
                        <GradientStop Offset="-0.6" Color="Black"></GradientStop>
                        <GradientStop Offset="0.6" Color="Transparent"></GradientStop>
                    </LinearGradientBrush>
                </Border.OpacityMask>
        </Border>
    </StackPanel>
</Grid>

我已经尝试用Width="{Binding ElementName=CurrentPresenter, Path=Width}"Height="{Binding ElementName=CurrentPresenter, Path=Height}"替换Border的Width="500"Height="200",但似乎不起作用。

这段代码有什么问题吗?

更新:如果我在此处设置宽度和高度:

<UserControl x:Name="CurrentPresenter" Height="200" Width="500" />

它按预期工作。但是,如果我在UserControl XAML中设置这些值,它就不起作用。有什么想法吗?


当你说它不起作用时,你实际上看到了什么样的行为?边框是否显得太小,还是它只是无限地拉伸(我两种情况都见过)。 - TabbyCool
它可以拉伸以填满容器。 - JAG
如果您在UserControl XAML中设置了高度和宽度,那么UserControl是否显示为正确的大小,只是边框在拉伸,还是两个控件的大小都不正确? - TabbyCool
如果我在UserControl XAML中设置高度和宽度,UserControl将以正确的大小显示,但边框会拉伸以填充容器。如果我不显式设置宽度和高度值,则绑定似乎无法正常工作。我将通过在usercontrol内创建“反射效果”来解决此问题,但我只是好奇为什么这不能按预期工作。 - JAG
2个回答

22

你是否尝试过将BorderHeightWidth属性绑定到UserControl的ActualHeightActualWidth属性,而不是绑定到UserControl的HeightWidth属性?

<Border 
 Width="{Binding ElementName=CurrentPresenter, Path=ActualWidth}"
 Height="{Binding ElementName=CurrentPresenter, Path=ActualHeight}" >

1
这个修复节省了一些头发。谢谢Tabby。 - Bob Black

0

将路径更改为ViewportWidth!这对我有效


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接