WPF Custom TabItem - 控件未显示在Visual Studio Designer中

时间:2016-02-02 21:25:41

标签: c# wpf visual-studio-2015 custom-controls

我创建了一个带有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)。

问题出在哪里?

Screenshot Designer Screenshot running Programm

3 个答案:

答案 0 :(得分:3)

如果你把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>

答案 1 :(得分:1)

你做了什么应该工作。但事实并非如此,我稍后会尝试说明原因。

但首先,我的解决方法:

  • 打开设计器,右键单击它,
  • 选择:编辑其他模板,然后编辑生成的内容,然后创建空... 提供新的DataTemplate个名称,说' DataTemplate1 '

Designer会生成一些代码 - 一个空的DataTemplate,其中包含一个键 DataTemplate1 ,它会将您的TabItem ContentTemplate属性添加到<{1}} > DataTemplate1 分配给它(DynamicResource)。

现在将TabItem的内容移至 DataTemplate1 。设计师应该正确显示您的布局。

如果您关闭并重新打开 SearchTab 控件,您将发现无法再次看到该内容。要右键单击设计器,请选择编辑其他模板,然后选择编辑生成的内容,然后编辑当前

为什么设计师无法加载 SearchTab ?如果右键单击设计器并选择编辑模板,然后编辑副本... ,您将生成TabItem样式。 Content {1}}的标题由ContentPresenter显示,而TabItem的内容必须显示在 innerBorder TabItem内。此边框的Border设置为零,并且Opacity将其更改为1,这取决于MultiTriggers。您的案例中的TabControl不存在,因此所有绑定都被破坏。这表明,更改'TabItem'的默认TabControl也可以解决您的问题。

答案 2 :(得分:1)

虽然我没有使用我的开发机器,但我只能提供一个建议。对于您在标签项控件上想要的任何内容,为什么不将所有控件放在自定义用户控件或网格中,前提是您知道要将其添加到动态添加到标签页的标签控件中。

标签项需要正确的父标签控件才能在设计器中呈现它。但如果你将所有东西都作为标准控件构建,那么它就会像你期望的那样外观和操作。

然后在运行时添加标签项,然后将自定义控件添加到动态添加的标签项中,看看它是否适合您。您显然拥有所有其他组件/流程。即使你的样本控件只是一个标签,文本框或类似的东西。