none
WindowFormHost承载WinForm控件,大小问题 RRS feed

  • 问题

  • <ListView HorizontalAlignment="Stretch" Name="VideoList" VerticalAlignment="Stretch" ItemsSource="{Binding}" HorizontalContentAlignment="Center" Grid.ColumnSpan="2" >
                <ListView.ItemsPanel>
                    <ItemsPanelTemplate>
                        <UniformGrid />
                    </ItemsPanelTemplate>
                </ListView.ItemsPanel>
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="90*"/>
                                <RowDefinition Height="10*" />
                            </Grid.RowDefinitions>
                            <WindowsFormsHost Background="Black" SizeChanged="WindowsFormsHost_SizeChanged">
                                <wf:Label Name="SubPanel" DoubleClick="PanelDoubleClick" HandleCreated="Label_HandleCreated" AutoSize="True" />
                            </WindowsFormsHost>
                            <TextBlock  Background="LightSkyBlue"  Text="{Binding Name}" TextAlignment="Center" FontSize="12"  Grid.Row ="1"/>
                        </Grid>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
    如上,在一个ListView的DataTempleted里承载了一个Winforms的Lable,这个用户控件大小改变的时候,Lable大小不会改变。。。
    2012年5月6日 14:40

答案

  • 我不知道你是否了解AirSpace问题,即在WPF中,一个基于GDI渲染的组件由于不能和WPF DX渲染同时渲染屏幕同一块区域,所以在设计WPF的时候,就规定将GDI等渲染的组件永远至于顶层,并且不受WPF布局控制,具体参看:http://msdn.microsoft.com/zh-cn/library/aa970688.aspx。所以你的Winform控件不会被ListViewItem的大小改变而改变。

    你所能做的只有在 WindowsFormsHost SizeChanged 事件中去逐个设置其内容大小。注意,你只有设置了 ListView.HorizontalContentAlignment="Stretch" 才会使得其内容项大小填充满期所占区域。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us


    2012年5月7日 3:50
    版主