我想创建一种"布局"帮助控制。使用它可以让我为几个部分定义内容,控件将负责确保布局一致。
我通过ContentPresenter
和object
依赖项属性执行此操作。
最终结果是,如果我运行应用程序,那么我定义的内容看起来很好。
但是在设计时间?它在设计师的屏幕上是空的。
这是一个主要问题 - 谁将会处理实际内容(无论是我还是其他任何人)应该能够预览他们正在做的事情,而无需不断启动应用程序。
我做错了什么?
以下是示例代码:
MainLayout.xaml(简化)
<Grid>
<Grid.ColumnDefinitions>
<!--layout related stuff-->
</Grid.ColumnDefinitions>
<!--layout related stuff-->
<Viewbox Grid.Column="1" Height="120" StretchDirection="DownOnly">
<ContentPresenter x:Name="HeaderContentPresenter" />
</Viewbox>
<ContentPresenter Grid.Column="2" x:Name="ButtonContentPresenter" />
</Grid>
MainLayout.cs(简化 - 继承UserControl
)
public object HeaderContent
{
get { return (object)GetValue(HeaderContentProperty); }
set { SetValue(HeaderContentProperty, value); }
}
// Using a DependencyProperty as the backing store for HeaderContent. This enables animation, styling, binding, etc...
public static readonly DependencyProperty HeaderContentProperty =
DependencyProperty.Register("HeaderContent", typeof(object), typeof(MainLayout), new PropertyMetadata(null, (d, e) => (d as MainLayout).HeaderContentPresenter.Content = e.NewValue));
public object ButtonContent
{
get { return (object)GetValue(ButtonContentProperty); }
set { SetValue(ButtonContentProperty, value); }
}
// Using a DependencyProperty as the backing store for ButtonContent. This enables animation, styling, binding, etc...
public static readonly DependencyProperty ButtonContentProperty =
DependencyProperty.Register("ButtonContent", typeof(object), typeof(MainLayout), new PropertyMetadata(null, (d, e) => (d as MainLayout).ButtonContentPresenter.Content = e.NewValue));
用法示例XAML:
<namespace:MainLayout>
<namespace:MainLayout.HeaderContent>
<TextBlock Text="This will be only visible once the app is started, but not in design-time" />
</namespace:MainLayout.HeaderContent>
</namespace:MainLayout>
请注意 - 这是Windows 8.1(WinRT-XAML)相关问题。它可能与类似的WPF问题没有相同的解决方案。