【问题标题】:C# WPF Put children of custom control to specific gridC# WPF 将自定义控件的子项放到特定网格中
【发布时间】:2015-11-12 07:56:01
【问题描述】:

我对 wpf 和用户控件创建有一些疑问。 我有简单的菜单控件,其中包括网格、图像(0 列)和文本块(1 列)。

我遇到的问题是如何将我的控件的所有子控件放到父控件附近的另一个网格中。

这是用户控件的演示代码:

<UserControl x:Name="userControl" x:Class="Yo.Controls.mItem"
         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:DesignHeight="50" d:DesignWidth="400">
<Grid x:Name="m_Grid">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="{Binding ActualHeight, ElementName=userControl, Mode=OneWay}"/>
        <ColumnDefinition/>
        <ColumnDefinition Width="305"/>
    </Grid.ColumnDefinitions>
    <Image x:Name="img" Grid.Column="0"/>
    <TextBlock x:Name="txt" Grid.Column="2"/>

    <Grid x:Name="sub_Grid" Visibility="Hidden" Background="#78000000" Margin="-450,0,50,0" MouseLeftButtonUp="img_Check" MouseEnter="grid_Enter" MouseLeave="grid_Leave"/>

</Grid>

其中 sub_Grid 是必须放置孩子的地方。

        <Controls:mItem Grid.Row="0" Text="Some txt" IsCheckable="False">
            <Controls:mItem Text="Its Child" IsCheckable="False"/>
        </Controls:mItem>

所以这段代码会将 Control with Text Its Child 放到 sub_Grid 中

【问题讨论】:

  • 您可以使用 MVVM 完成此操作。您的文本框和图像可以是 DataTemplates 的 VM 对象。那么 Grid 应该有一个 ItemsControl 子级,它共享相同的 ItemSource。

标签: c# wpf


【解决方案1】:

我相信您应该将控件嵌套在 subGrid 中,然后为子网格定义列。我在这里提出以下建议,因为我不完全理解您的问题,所以我在这里很懦弱:

 <Grid x:Name="m_Grid" Background="Red">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="80"/>
        <ColumnDefinition/>
        <ColumnDefinition Width="305"/>
    </Grid.ColumnDefinitions>
    <Grid x:Name="sub_Grid" Background="Blue" Margin="0,0,50,0" 
          MouseLeftButtonUp="img_Check" MouseEnter="grid_Enter" MouseLeave="grid_Leave" Grid.Column="2">
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Image x:Name="img" Grid.Column="0"/>
        <TextBlock x:Name="txt" Grid.Column="2"/>
    </Grid>
</Grid

【讨论】:

    猜你喜欢
    • 2017-04-14
    • 2014-10-06
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    相关资源
    最近更新 更多