Wpf 显示隐藏控件中的VisualBrush

Wpf 显示隐藏控件中的VisualBrush,wpf,xaml,Wpf,Xaml,我得到了以下xaml <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <TextBlock x:Name="_sampleText" Grid.Row="0" VerticalAlignment=

我得到了以下xaml

<Grid>
<Grid.RowDefinitions>
  <RowDefinition Height="Auto" />
  <RowDefinition Height="Auto" />
</Grid.RowDefinitions>

<TextBlock x:Name="_sampleText"
           Grid.Row="0"
           VerticalAlignment="Stretch" 
           HorizontalAlignment="Stretch"
           Width="200" 
           Height="50"
           FontSize="36"
           Text="Hello world"
           TextAlignment="Center"
           Visibility="Collapsed" />

<Border Grid.Row="1" 
        Width="{Binding ActualWidth, ElementName=_sampleText}" 
        Height="{Binding ActualHeight, ElementName=_sampleText}">
  <Border.Background>
    <VisualBrush Stretch="None" 
                 Visual="{Binding ElementName=_sampleText}" />
  </Border.Background>
</Border>
</Grid>


我希望我的视觉效果被渲染,即使他绑定的控件也不可见。有办法吗?

没有。如果
可见性=塌陷
,则它将不参与测量/排列布局过程,并且不会被渲染(
宽度
高度
将为0)

你想达到什么效果?看起来你想要一个预览窗格?在评论中回复,我们可以找出最好的方法

编辑:有一种方法可以从代码隐藏调用
ui元素的度量/更新,但是我认为最好的方法是使用
booltVisibilityConverter

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <CheckBox x:Name="OptionCheckBox" Grid.Row="0" />
    <Border Grid.Row="1" Visibility="{Binding Path=IsChecked, ElementName=OptionCheckBox", Converter={StaticResouce BoolToVisibilityConverter}}"> 
        <TextBlock Width="200" Height="50" FontSize="36" Text="Hello world" TextAlignment="Center"/>
    </Border>
</Grid>


您还可以将文本块放置在边框中,并将其隐藏起来:

<Border Visibility="Hidden">
    <TextBlock ... />
</Border>


是否有一种方法可以在不渲染(屏幕上)控件的情况下调用测量/排列?是的,它有点像预览窗格。这是一个选项页面,用户可以在其中说:是的,我想显示该控件(或不显示),并尝试预览该控件的外观。如果控件已经可见,并且用户说我不想再看到它,这很容易,但反过来说,它不起作用…@melurus:更新了我的答案以回应您的评论。。。那应该是你想要的。如果您有许多不同类型的控件要预览,那么我会在预览窗格中放置一个
ContentControl
,然后使用
DataTemplate
作为一个不可见的容器,当然也可以使用任何其他面板。或
。这是你的选择,但视觉效果总是一样的。