当您详细说明您想要的行为时,我的另一个答案已经过时了,所以请原谅我发布第二个答案。根据我对上述答案的后面评论,请考虑以下示例:
<Canvas x:Name="LayoutRoot">
<Grid x:Name="MarqueePanels">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Rectangle Grid.Column="0" Height="{Binding ElementName=PrimaryMarquee, Path=ActualHeight}" Width="{Binding ElementName=PrimaryMarquee, Path=ActualWidth}">
<Rectangle.Fill>
<VisualBrush Visual="{Binding ElementName=PrimaryMarquee}"/>
</Rectangle.Fill>
</Rectangle>
<StackPanel Grid.Column="1" x:Name="PrimaryMarquee">
<TextBlock Text="Marquee Item 1"/>
<TextBlock Text="Marquee Item 2"/>
<TextBlock Text="Marquee Item 3"/>
</StackPanel>
<Rectangle Grid.Column="2" Height="{Binding ElementName=PrimaryMarquee, Path=ActualHeight}" Width="{Binding ElementName=PrimaryMarquee, Path=ActualWidth}">
<Rectangle.Fill>
<VisualBrush Visual="{Binding ElementName=PrimaryMarquee}"/>
</Rectangle.Fill>
</Rectangle>
</Grid>
</Canvas>
正如我上面提到的,将Visibility
任何TextBox
元素的 因此,如果您确实需要使用 a来包含视觉元素,那么我建议根据您上面的评论使用代替.Hidden
StackPanel
Visibility.Collapsed
Arrange
StackPanel
Visibility.Hidden
Visibility.Collapsed
还要注意VisualBrush
复制选取框内容的使用。这将简化代码,并确保所有 3 种视觉效果始终匹配(您应用到包含 的Rectangle
对象的任何定位或转换除外VisualBrush
)。
此外,我应该说我个人会使用 aCanvas
代替StackPanel
,因为Canvas
它更适合子元素的绝对定位,因此是您提出问题的原因。
克雷格,我真的希望这会有所帮助。我(像这里的大多数人一样)会尽我所能提供帮助。祝你好运!