Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF自定义控件渲染不正确_C#_Wpf_Custom Controls - Fatal编程技术网

C# WPF自定义控件渲染不正确

C# WPF自定义控件渲染不正确,c#,wpf,custom-controls,C#,Wpf,Custom Controls,我正在wpf中创建一个类似pivot的控件,但该控件的标题有问题。它仅在调整窗口大小时显示,可能是因为在呈现轴控件时尚未测量标题控件。 我可能忘记了什么或做错了什么,但我就是不知道是什么 我创建了一个解决方案来演示这个问题。你可以在这里下载 有人能解决这个问题吗?或者有人能给我指出正确的方向吗 谢谢。您的代码似乎有一些问题,我还没有设法让它工作,但这是我注意到的 您可能希望在pivot控件上创建一个依赖项属性,该属性可以在Generic.xaml中模板绑定到PivotHeaderItemsCon

我正在wpf中创建一个类似pivot的控件,但该控件的标题有问题。它仅在调整窗口大小时显示,可能是因为在呈现轴控件时尚未测量标题控件。 我可能忘记了什么或做错了什么,但我就是不知道是什么

我创建了一个解决方案来演示这个问题。你可以在这里下载

有人能解决这个问题吗?或者有人能给我指出正确的方向吗


谢谢。

您的代码似乎有一些问题,我还没有设法让它工作,但这是我注意到的

您可能希望在pivot控件上创建一个依赖项属性,该属性可以在Generic.xaml中模板绑定到PivotHeaderItemsControl

    public ObservableCollection<string> Headers
    {
        get { return (ObservableCollection<string>)GetValue(HeadersProperty); }
        set { SetValue(HeadersProperty, value); }
    }

    // Using a DependencyProperty as the backing store for Headers.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty HeadersProperty =
        DependencyProperty.Register("Headers", typeof(ObservableCollection<string>), typeof(Pivot), new UIPropertyMetadata(null));
publicobservableCollection标头
{
获取{return(observeCollection)GetValue(HeadersProperty);}
set{SetValue(HeadersProperty,value);}
}
//使用DependencyProperty作为标头的备份存储。这将启用动画、样式、绑定等。。。
公共静态只读从属属性HeadersProperty=
DependencyProperty.Register(“标头”、typeof(ObservableCollection)、typeof(Pivot)、新UIPropertyMetadata(null));
此外,ItemsControl的模板似乎不正确,您已将ItemsPresenter包装在网格中,但这将意味着ItemsSource中的每个项目都将层叠在一起。如果将ItemsPresenter包装在StackPanel或类似的东西中,则所有项目都应该出现

<StackPanel>
    <ItemsPresenter x:Name="ItemsPresenter"
                    Grid.Row="1"
                    Margin="{TemplateBinding Padding}"/>
</StackPanel>


如果您更新了样本,我可以再看一看。

我还没有看附件,但您是否绑定到窗口大小?是否指定窗口大小?如果不是,这些将是
NaN
。不,我不绑定宽度或高度。这些只是在MainWindow.xaml中指定的。控件模板包含一个具有两行的网格。页眉控件位于第0行,并且第0行的高度设置为“自动”。项目似乎缺少在generic中引用的PivotHeaderCategoriesControl和PivotHeader。xamlI删除了对缺少的两个控件的引用。我以前使用过它们,但现在将问题归结为解决方案中的这四个控件。Th链接仍然是一样的。我知道这些项目将层叠在一起,但我这样做是为了排除故障可能出现在我的自定义面板中。原始帖子中引用的解决方案现在包含标题的依赖属性,但问题仍然存在。我已经在blend中使用了所有XAML,它看起来很好。如果我在Pivot中的OnItemChanged上注释掉If语句,则标头将呈现良好状态。我怀疑发生的情况是,在渲染视图时,RefreshHeaderCollection被调用为延迟,因此在调整窗口大小之前不会显示标题。通过删除if语句,可以更早地调用该方法,从而正确显示标题。谢谢!我刚刚尝试了它,它可以工作,但是当我在MainWIndow.xaml中向Pivot添加一个尚未创建容器的子对象时,这将失败,因为RefreshHeaderCollection调用ItemcontainerGenerator.COntainerFromIndex(I),它返回null,因为尚未创建容器。有什么想法吗?你可能需要更新你的样本,我不太明白。你给pivot添加了什么样的孩子?