[英]WPF Custom TabItem - Controls not displayed in Visual Studio Designer
我创建了一个带有DockPanel和Button的自定义TabItem。
XAML:
<TabItem
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" x:Class="MovieDB.UI.UserControlls.SearchTab" d:DesignWidth="500.038" d:DesignHeight="309.055">
<DockPanel Background="#FFE5E5E5">
<Button x:Name="button" Content="Button" Height="100" Width="75" HorizontalAlignment="Left" VerticalAlignment="Top"/>
</DockPanel>
</TabItem>
C#:
namespace MovieDB.UI.UserControlls
{
/// <summary>
/// Interaktionslogik für SearchTab.xaml
/// </summary>
public partial class SearchTab : TabItem
{
private SearchContainer<SearchMovie> results;
public SearchTab()
{
InitializeComponent();
this.Header = "Suche";
}
public SearchTab(SearchContainer<SearchMovie> results):this()
{
this.updateSearch(results);
}
public void updateSearch(SearchContainer<SearchMovie> results)
{
clear();
if(results.TotalResults == 0)
{
}
else
{
this.results = results;
Debug.WriteLine("Results: " + results.Results.Count());
}
}
private void clear()
{
}
}
}
如果启动我的程序,则显示按钮(屏幕截图2)。 但是按钮和我想面板itselve确实noch出现在Visual Studio 2015 Designer中(截图1)。
问题出在哪儿?
如果你把TabItem放在一个TabControl中它工作正常。我认为这是问题。 设计师需要像TabControl,Window Page等导航控件作为root。
<TabControl x:Class="CustomControls.tab"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignWidth="500.038" d:DesignHeight="309.055">
<TabItem>
<DockPanel Background="#FFE5E5E5">
<Button x:Name="button" Content="Button" Height="100" Width="75" HorizontalAlignment="Left" VerticalAlignment="Top"/>
</DockPanel>
</TabItem>
</TabControl>
你做了什么应该工作。 但事实并非如此,我稍后会尝试说明原因。
但首先,我的解决方法:
DataTemplate
命名,说' DataTemplate1 ' Designer将生成一些代码 - 一个带有关键DataTemplate1的空DataTemplate
,它将向TabItem
添加ContentTemplate
属性,并为其分配DataTemplate1 (通过DynamicResource
)。
现在将TabItem
的内容移动到DataTemplate1 。 设计师应该正确显示您的布局。
如果您关闭并重新打开SearchTab控件,您将发现无法再次看到该内容。 要右键单击设计器,请选择编辑其他模板 ,然后选择编辑生成的内容 ,然后选择编辑当前 。
为什么设计师无法加载您的SearchTab ? 如果右键单击设计器并选择“ 编辑模板” ,然后选择“ 编辑 副本...” ,则会生成TabItem
样式。 TabItem
的标题由ContentPresenter显示,而TabItem的内容必须显示在innerBorder Border
。 此边框的“ Opacity
设置为零,并且MultiTriggers
其更改为1,这取决于TabControl
。 您的案例中的TabControl
不存在,因此所有绑定都被破坏。 这表明,更改“TabItem”的默认Style
也可以解决您的问题。
虽然我没有使用我的开发机器,但我只能提供一个建议。 对于您在标签项控件上想要的任何内容,为什么不将所有控件放在自定义用户控件或网格中,前提是您知道要将其添加到动态添加到标签页的标签控件中。
选项卡项需要其正确的父选项卡控件才能在设计器中呈现它。 但是,如果您将所有内容构建为标准控件,请使其外观和操作符合您的预期。
然后在运行时添加标签项,然后将自定义控件添加到动态添加的标签项中,看看它是否适合您。 您显然拥有所有其他组件/流程。 即使您的样本控件只是标签,文本框或类似的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.