none
自定义控件无法正常显示 RRS feed

  • 问题

  • 用户控件xaml如下

    问题出在调用的时候,contentcontrol似乎会覆盖整个控件区域,导致头像和名字显示不出来

        <Grid>
            <Grid Name="gFrame">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="30" />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>
                <Image Name="headerImg" Height="30" VerticalAlignment="Top" Source="{Binding HeaderIconPath}"></Image>
                <Grid Name="gInner" Grid.Column="1">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="10"></RowDefinition>
                        <RowDefinition></RowDefinition>
                    </Grid.RowDefinitions>
                    <TextBlock Name="nickName" Text="{Binding NickName}" ></TextBlock>
                    <Grid Name="gContent" Grid.Row="1">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="10"></ColumnDefinition>
                            <ColumnDefinition></ColumnDefinition>
                        </Grid.ColumnDefinitions>
                        <Grid Name="gReal" Grid.Column="1">
                            <WrapPanel Name="contentWp">//调用的时候发现这个控件会把前面的nickname和headicon区域覆盖掉
                                <ContentControl Content="{Binding MessageContent}"/>
                            </WrapPanel>                        
                        </Grid>
                    </Grid>
                </Grid>
            </Grid>             
        </Grid>
    </UserControl>

    后台代码

     public partial class MessageItem : UserControl
        {
            public MessageItem()
            {
                InitializeComponent();
                this.DataContext = this;
            }
    
    
            public string HeaderIconPath
            {
                get { return (string)GetValue(HeaderIconPathProperty); }
                set { SetValue(HeaderIconPathProperty, value); }
            }
    
            public string NickName
            {
                get { return (string)GetValue(NickNameProperty); }
                set { SetValue(NickNameProperty, value); }
            }
    
            public FrameworkElement MessageContent
            {
                get { return (FrameworkElement)GetValue(MessageContentProperty); }
                set { SetValue(MessageContentProperty, value); }
            }
    
            public static readonly DependencyProperty HeaderIconPathProperty = DependencyProperty.Register("HeaderIconPath", typeof(string), typeof(MessageItem));
            public static readonly DependencyProperty NickNameProperty = DependencyProperty.Register("NickName", typeof(string), typeof(MessageItem));
            public static readonly DependencyProperty MessageContentProperty = DependencyProperty.Register("MessageContent", typeof(FrameworkElement), typeof(MessageItem));
            
        }
    }
    

    调用的地方

    只要吧Content属性从自定义控件中移除,就会显示出头像图标和名字

    请问这是怎么一回事,是那个Content依赖属性定义得有问题么

        </Window.Resources>
        <Grid>
            <msg:MessageItem HeaderIconPath="1111111111111111.png" NickName="xxxxxx" >
                <msg:MessageItem.Content>              
                        <TextBlock Text="111111111111222222222222"></TextBlock>
                        <Image Source="1111111111111111.png"></Image>                           
                </msg:MessageItem.Content>
            </msg:MessageItem>
        </Grid>

    2016年4月27日 2:38

答案

  • 问题出在你的Resource中 Content隐式用了Grid 然后在这个Grid中,所有的控件就都平铺占满了区域。而这个Grid就成为一个整体作为ContentControl的内容放入了MessageCotnrol。

    你可以在你的MessageItem.Content中再通过StackPanel 等布局控制下


    Bob Bao

    Do you still use the same Windows 8 LockScreen always? Download Chameleon Win8 App quickly, that changes your LockScreen constantly.
    你是否还在看着一成不变的Windows 8锁屏而烦恼,赶紧下载这个 百变锁屏 应用,让你的锁屏不断地变化起来。


    2016年4月27日 3:56
    版主
  • 您好 wpf萌新,

    问题的根源是在这一段。

    <msg:MessageItem.Content>              
         <TextBlock Text="111111111111222222222222"></TextBlock>
        <Image Source="1111111111111111.png"></Image>                           
    </msg:MessageItem.Content>
    

    其中Content代表这个控件的内容,它会替换你在XAML中写的所有东西。所以需要把Content替换为你自定义的MessageContent。

    <msg:MessageItem.MessageContent>
        <StackPanel>
            <TextBlock Text="111111111111222222222222"></TextBlock>
            <Image Source="1111111111111111.png"></Image>
        </StackPanel>
    </msg:MessageItem.MessageContent>
    Best Regards,
    Li Wang

    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2016年5月2日 5:22

全部回复

  • 问题出在你的Resource中 Content隐式用了Grid 然后在这个Grid中,所有的控件就都平铺占满了区域。而这个Grid就成为一个整体作为ContentControl的内容放入了MessageCotnrol。

    你可以在你的MessageItem.Content中再通过StackPanel 等布局控制下


    Bob Bao

    Do you still use the same Windows 8 LockScreen always? Download Chameleon Win8 App quickly, that changes your LockScreen constantly.
    你是否还在看着一成不变的Windows 8锁屏而烦恼,赶紧下载这个 百变锁屏 应用,让你的锁屏不断地变化起来。


    2016年4月27日 3:56
    版主
  •   <Grid Name="gReal" Grid.Column="1">//但是它在自定义控件中已经被套在了一个grid中,难道这不起作用?
                            <WrapPanel Name="contentWp">
                                <ContentControl Content="{Binding MessageContent}"/>
                            </WrapPanel>                        
                        </Grid>
    2016年4月27日 5:02
  • 您好 wpf萌新,

    问题的根源是在这一段。

    <msg:MessageItem.Content>              
         <TextBlock Text="111111111111222222222222"></TextBlock>
        <Image Source="1111111111111111.png"></Image>                           
    </msg:MessageItem.Content>
    

    其中Content代表这个控件的内容,它会替换你在XAML中写的所有东西。所以需要把Content替换为你自定义的MessageContent。

    <msg:MessageItem.MessageContent>
        <StackPanel>
            <TextBlock Text="111111111111222222222222"></TextBlock>
            <Image Source="1111111111111111.png"></Image>
        </StackPanel>
    </msg:MessageItem.MessageContent>
    Best Regards,
    Li Wang

    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2016年5月2日 5:22
  • 哦,这样啊,我以为在他外面已经有一个wrappanel了,就不用再加了
    2016年5月10日 5:48