我是WPF的新手,所以我会接受每一条建议。我的问题: 我使用Designer以我喜欢的方式放置UI的不同组件。这很棒。这种类型的XAML结构带来了问题:
<Window>
<Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
/* Couple of buttons */
</Grid>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="223*"/>
<RowDefinition Height="99*"/>
</Grid.RowDefinitions>
<TabControl Margin="85,0,0,0" Padding="0,-5,0,0" Grid.RowSpan="2">
<TabItem Visibility="Collapsed">
<Grid>
/* textboxes and labels */
</Grid>
</TabItem>
<TabItem Visibility="Collapsed">
<Grid>
<Border Visibility="Hidden" Margin="136,66,76,66" Panel.ZIndex="10" BorderThickness="1" Width="320" Height="180">
<Grid Background="White">
<Grid.Effect>
<DropShadowEffect BlurRadius="10" RenderingBias="Quality" Direction="270" ShadowDepth="3" Opacity="0.1"/>
</Grid.Effect>
/* labels, textboxes and buttons */
</Grid>
</Border>
<TabControl Margin="0,0,0,38">
<TabItem>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
/* other elements */
</Grid>
</TabItem>
<TabItem>
<Grid>
<Grid>
/* checkboxes */
</Grid>
<Grid>
/* checkboxes */
</Grid>
/* labels */
</Grid>
</TabItem>
<TabItem>
<Grid>
</Grid>
</TabItem>
</TabControl>
/* buttons and labels */
</Grid>
</TabItem>
</TabControl>
</Grid>
</Grid>
通常当我想在场景中移动某些内容时,我只需选择它并拖动/更改它,因为它比在XAML中编写它要容易得多。但是,使用上面的代码,如果我想从内部TabControl中选择一些东西,我就是不能。它会自动选择上面的那个,这使得管理UI变得更加困难。我猜这与Z-Index有关,但我不太确定。我知道这可能是一个愚蠢的问题,但它让我很挣扎,所以如果有人向我解释,我会非常感激!
谢谢!
答案 0 :(得分:1)
嗯,我的猜测是你的网格彼此叠加,捕获点击次数并阻止选择下面的元素(如你所说,z顺序)。
需要注意的一些事项
对于设计师来说,这并不是特定的,如果你将Hit Testable元素分层放在每个元素之上,即使它们看起来很透明,它们仍会捕获点击和“偷”焦点。你可以做各种事情来防止这种情况,一个选项可能是你希望点击“通过”到它下面的元素的元素上设置IsHitTestVisible = false。另一种选择是将元素的背景设置为{x:Null},而不是默认值(透明)。
您可以使用VS窗口左侧(或“视图”|“其他Windows”|“文档大纲”)的“文档大纲”面板来直观地浏览可视树。这将允许您“选择”项目,即使它在其他项目下面。但是,即使在文档轮廓中选择它也不会浮动到设计图面的顶部,因此您将无法拖动它来定位它,但您将能够抓住重新调整尺寸处理和访问所选元素的属性窗口。
最终你必须“隐藏”它上面的元素才能获得你想要的拖拽定位。
答案 1 :(得分:1)
我遇到了同样的问题 - 我正在忙着在WPF设计器中布置我的应用程序,我以前可以移动的东西是不可选择的和不可分割的,TabControl
始终是关注焦点。
问题似乎是TabItem
正在崩溃。我发现无法在具有Visibility="Collapsed"
的TabItem中选择任何内容。
如果您需要移动物品,请暂时将可见性更改为Visible
- 我可以在设计器中移动内容,然后再将可见性设置回来。
我没有对此进行特别彻底的测试,这有点像kludge,但它对我来说做得很好。