ListView不会在Placement.Full

时间:2016-01-04 02:32:14

标签: c# xaml windows-10-universal

我正在构建一个Win 10 UWP应用程序。根据下面的xaml,我有ListView,这是Button.Flyout的内容。它与标准ListView控件基本相同,但为我提供了一种绑定到特定项的IsSelected属性的方法。我已经添加了完整性的实现。 MinWindowWitdth为720时,展示位置模式更改为Right。在此状态下,ListViewItem会延伸以填充ListView。当不处于此状态(默认)时,它位于Placement.Full,并且ListViewItem不会延伸到整个ListView,这似乎延伸到Flyout {1}},VerticalScrollBarFlyout的右边可见。

根据我可以调查的情况,将ListView.ItemContainerStyle设置为HorizontalContentAlignment.Stretch应该已经取得了成果,但是我留下的内容只延伸了一半,我无法弄清楚这是为什么。

我注意到他CommandBar包含在全屏Flyout的可滚动内容中,但是,在Placement.Right中它不是(这是预期的设计)。因此Full似乎导致Flyout创建ScrollViewer并忽略ListView.HorizontalAlignment.Stretch属性。有办法解决这个问题吗?

XAML;

<Button.Flyout>
                                <Flyout x:Name="RulesListFlyout" Placement="Full">
                                    <RelativePanel HorizontalAlignment="Stretch">
                                        <commontools:ListViewWithSelectedItems x:Name="RulesListForInclusion" ItemsSource="{Binding AllRulesForInclusion}" SelectionMode="Multiple" IsMultiSelectCheckBoxEnabled="True"
                                                   RelativePanel.Above="RulesCommandB" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch">
                                            <ListView.ItemContainerStyle>
                                                <Style TargetType="ListViewItem">
                                                    <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                                                    <Setter Property="HorizontalAlignment" Value="Stretch"/>
                                                </Style>
                                            </ListView.ItemContainerStyle>
                                            <ListView.ItemTemplate>
                                                <DataTemplate x:DataType="ListViewItem">
                                                    <RelativePanel Margin="12,0" HorizontalAlignment="Stretch">
                                                        <TextBlock x:Name="Title" Text="{Binding StoredDataObject.Title}" RelativePanel.AlignLeftWithPanel="True"
                                                                   RelativePanel.AlignTopWithPanel="True" RelativePanel.AlignRightWithPanel="True"/>
                                                        <TextBox x:Name="Variable" Text="{Binding InputVariable, Mode=TwoWay}" Width="50" AcceptsReturn="False" RelativePanel.Below="Title"
                                                                 Visibility="{Binding ShowVariableBox, Converter={StaticResource TrueToVis}, Mode=TwoWay}"/>
                                                    </RelativePanel>
                                                </DataTemplate>
                                            </ListView.ItemTemplate>
                                        </commontools:ListViewWithSelectedItems>
                                        <CommandBar x:Name="RulesCommandB" Grid.Row="1" RelativePanel.AlignBottomWithPanel="True" RelativePanel.AlignLeftWithPanel="True" RelativePanel.AlignRightWithPanel="True">
                                            <AppBarButton Icon="Accept" Label="Accept" Command="{Binding CommandSetIncludedRules}" Click="SetSpecialRuleFlyoutButton_Click"/>
                                            <AppBarButton Icon="Cancel" Label="Cancel" Command="{Binding CommandResetIncludedRules}" Click="SetSpecialRuleFlyoutButton_Click"/>
                                        </CommandBar>
                                    </RelativePanel>
                                    <Flyout.FlyoutPresenterStyle>
                                        <Style TargetType="FlyoutPresenter">
                                            <Setter Property="MinWidth" Value="100"/>
                                            <Setter Property="Padding" Value="0"/>
                                            <Setter Property="HorizontalAlignment" Value="Stretch"/>
                                        </Style>
                                    </Flyout.FlyoutPresenterStyle>
                                </Flyout>
                            </Button.Flyout>

ListView实施;

 public class ListViewWithSelectedItems : ListView
{
    protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
    {
        base.PrepareContainerForItemOverride(element, item);
        ListViewItem listItem = element as ListViewItem;
        Binding binding = new Binding();
        binding.Mode = BindingMode.TwoWay;
        binding.Source = item;
        binding.Path = new PropertyPath("IsCheckedInList");
        listItem.SetBinding(ListViewItem.IsSelectedProperty, binding);
    }
}

0 个答案:

没有答案