如何在用户控件中添加任意内容

时间:2014-01-10 13:41:15

标签: c# xaml windows-phone-8 windows-store-apps

我有一个Windows Phone应用程序,我想要实现以下目标: 定义一个具有Button和任意控件的(用户)控件。用户单击按钮后,第二个控件变为可见,并且按钮被隐藏。 我可以直接在CodeBehind或ViewModel中实现这一点,但我希望能够在我需要的所有地方重用某种控件。

我google了一下,然后穿过ContentPresenter。 控制:

<StackPanel Background="Red" x:Name="LayoutRoot">
    <Button Content="Dummy"/>
    <ContentPresenter/>
</StackPanel>

XAML电话:

<controls:MyControl>
   <TextBlock Text="Text Content"/>
</controls:MyControl>

但Contentpresenter不能像这样使用,并且永远不会显示Button,因为内容的页面XAML定义将覆盖用户控件xaml中定义的内容。

然后我发现了使用模板的提示,但我还不知道如何将它与我想在这里应用的逻辑相结合。

我应该创建一个userControl,它具有Button的VisibilityProperties和其他控件,然后由模板使用吗?

任何建议或提示都会被认可,以便了解继续搜索的位置。

1 个答案:

答案 0 :(得分:0)

怎么样:

控制:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="auto"/>
    </Grid.RowDefinitions>
    <Button Content="ClickMe" Click="Button_Click"/>
    <StackPanel Grid.Row="1" x:FieldModifier="public" x:Name="Content"/>
</Grid>

Control.cs:

private void Button_Click(object sender, RoutedEventArgs e)
    {
        if (Content.Visibility == Visibility.Collapsed)
        {
            Content.Visibility = Visibility.Visible;
        }
        else
        {
            Content.Visibility = Visibility.Collapsed;
        }
    }

MainPage.xaml中:

<local:MyUserControl1 x:Name="MyControl" HorizontalAlignment="Left" Margin="327,124,0,0" VerticalAlignment="Top"/>

MainPage.xaml.cs(添加内容):

MyControl.Content.Children.Add(new Button());
        MyControl.Content.Children.Add(new Button());
        MyControl.Content.Children.Add(new Button());
        MyControl.Content.Children.Add(new Button());
        MyControl.Content.Children.Add(new Button());
        MyControl.Content.Children.Add(new Button());