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