ContentDialog不会滚动

时间:2015-12-08 17:10:31

标签: xaml uwp

在UWP中,ContentDialog仅调整到一定大小,然后剪切内容 - 不滚动。如果我在内容中添加了ScrollViewer,那么它只会随着其内容的增长而增长。内容无限和滚动。

3 个答案:

答案 0 :(得分:2)

由于我在别处找不到解决方案,这是我的:

https://msdn.microsoft.com/en-us/library/windows/apps/mt299120.aspx复制ContentDialog的默认样式,然后更改ScrollViewer的属性:

            <ScrollViewer x:Name="ContentScrollViewer"
                    HorizontalScrollBarVisibility="Disabled"
                    VerticalScrollBarVisibility="Disabled"

            <ScrollViewer x:Name="ContentScrollViewer"
                    HorizontalScrollBarVisibility="Auto"
                    VerticalScrollBarVisibility="Auto"

听起来很简单,但我花了太多时间调试可视树来解决这个问题......

以下是您要应用于您想要滚动的ContentDialog的完整样式:

        <!-- Default style for Windows.UI.Xaml.Controls.ContentDialog -->
        <Style TargetType="ContentDialog" x:Key="ScrollableContentDialogStyle">
            <Setter Property="Foreground" Value="{ThemeResource SystemControlPageTextBaseHighBrush}" />
            <Setter Property="Background" Value="{ThemeResource SystemControlBackgroundChromeMediumLowBrush}" />
            <Setter Property="HorizontalAlignment" Value="Center" />
            <Setter Property="VerticalAlignment" Value="Top" />
            <Setter Property="IsTabStop" Value="False" />
            <Setter Property="MaxHeight" Value="{ThemeResource ContentDialogMaxHeight}" />
            <Setter Property="MinHeight" Value="{ThemeResource ContentDialogMinHeight}" />
            <Setter Property="MaxWidth" Value="{ThemeResource ContentDialogMaxWidth}" />
            <Setter Property="MinWidth" Value="{ThemeResource ContentDialogMinWidth}" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ContentDialog">
                        <Border x:Name="Container">
                            <Grid x:Name="LayoutRoot">
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="Auto" />
                                </Grid.RowDefinitions>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto" />
                                </Grid.ColumnDefinitions>
                                <Border x:Name="BackgroundElement"
                                        Background="{TemplateBinding Background}"
                                        FlowDirection="{TemplateBinding FlowDirection}"
                                        BorderThickness="{ThemeResource ContentDialogBorderWidth}"
                                        BorderBrush="{ThemeResource SystemControlForegroundAccentBrush}"
                                        MaxWidth="{TemplateBinding MaxWidth}"
                                        MaxHeight="{TemplateBinding MaxHeight}"
                                        MinWidth="{TemplateBinding MinWidth}"
                                        MinHeight="{TemplateBinding MinHeight}" >
                                    <Grid x:Name="DialogSpace" VerticalAlignment="Stretch">
                                        <Grid.RowDefinitions>
                                            <RowDefinition Height="Auto" />
                                            <RowDefinition Height="*" />
                                            <RowDefinition Height="Auto" />
                                        </Grid.RowDefinitions>
                                        <ScrollViewer x:Name="ContentScrollViewer"
                                                      HorizontalScrollBarVisibility="Auto"
                                                      VerticalScrollBarVisibility="Auto"
                                                      ZoomMode="Disabled"
                                                      Margin="{ThemeResource ContentDialogContentScrollViewerMargin}"
                                                      IsTabStop="False">
                                            <Grid>
                                                <Grid.RowDefinitions>
                                                    <RowDefinition Height="Auto" />
                                                    <RowDefinition Height="Auto" />
                                                </Grid.RowDefinitions>
                                                <ContentControl x:Name="Title"
                                                                Margin="{ThemeResource ContentDialogTitleMargin}"
                                                                Content="{TemplateBinding Title}"
                                                                ContentTemplate="{TemplateBinding TitleTemplate}"
                                                                FontSize="20"
                                                                FontFamily="Segoe UI"
                                                                FontWeight="Normal"
                                                                Foreground="{TemplateBinding Foreground}"
                                                                HorizontalAlignment="Left"
                                                                VerticalAlignment="Top"
                                                                IsTabStop="False"
                                                                MaxHeight="{ThemeResource ContentDialogTitleMaxHeight}" >
                                                    <ContentControl.Template>
                                                        <ControlTemplate TargetType="ContentControl">
                                                            <ContentPresenter
                                                                Content="{TemplateBinding Content}"
                                                                MaxLines="2"
                                                                TextWrapping="Wrap"
                                                                ContentTemplate="{TemplateBinding ContentTemplate}"
                                                                Margin="{TemplateBinding Padding}"
                                                                ContentTransitions="{TemplateBinding ContentTransitions}"
                                                                HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                                                VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
                                                        </ControlTemplate>
                                                    </ContentControl.Template>
                                                </ContentControl>
                                                <ContentPresenter x:Name="Content"
                                                                  ContentTemplate="{TemplateBinding ContentTemplate}"
                                                                  Content="{TemplateBinding Content}"
                                                                  FontSize="{ThemeResource ControlContentThemeFontSize}"
                                                                  FontFamily="{ThemeResource ContentControlThemeFontFamily}"
                                                                  Margin="{ThemeResource ContentDialogContentMargin}"
                                                                  Foreground="{TemplateBinding Foreground}"
                                                                  Grid.Row="1"
                                                                  TextWrapping="Wrap" />
                                            </Grid>
                                        </ScrollViewer>
                                        <Grid x:Name="CommandSpace" Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Bottom">
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition/>
                                                <ColumnDefinition/>
                                            </Grid.ColumnDefinitions>
                                            <Border x:Name="Button1Host"
                                                    Margin="{ThemeResource ContentDialogButton1HostMargin}"
                                                    MinWidth="{ThemeResource ContentDialogButtonMinWidth}"
                                                    MaxWidth="{ThemeResource ContentDialogButtonMaxWidth}"
                                                    Height="{ThemeResource ContentDialogButtonHeight}"
                                                    HorizontalAlignment="Stretch" />
                                            <Border x:Name="Button2Host"
                                                    Margin="{ThemeResource ContentDialogButton2HostMargin}"
                                                    MinWidth="{ThemeResource ContentDialogButtonMinWidth}"
                                                    MaxWidth="{ThemeResource ContentDialogButtonMaxWidth}"
                                                    Height="{ThemeResource ContentDialogButtonHeight}"
                                                    Grid.Column="1"
                                                    HorizontalAlignment="Stretch" />
                                        </Grid>
                                    </Grid>
                                </Border>
                            </Grid>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

答案 1 :(得分:0)

您必须使用此内容模板修改deafult ContentDialog,或者在ContentDialog中使用新样式:

<Style x:Key="MyCustomToolsContentDialog"
    TargetType="ContentDialog">
<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="ContentDialog">
            <Border x:Name="Container">
                <Grid x:Name="LayoutRoot">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto" />
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>
                    <Border x:Name="BackgroundElement"
                            Background="{TemplateBinding Background}"
                            FlowDirection="{TemplateBinding FlowDirection}"
                            BorderThickness="{ThemeResource ContentDialogBorderWidth}"
                            BorderBrush="{ThemeResource SystemControlForegroundAccentBrush}"
                            MaxWidth="{TemplateBinding MaxWidth}"
                            MaxHeight="{TemplateBinding MaxHeight}"
                            MinWidth="{TemplateBinding MinWidth}"
                            MinHeight="{TemplateBinding MinHeight}">
                        <Grid x:Name="DialogSpace"
                                VerticalAlignment="Stretch">
                            <Grid.RowDefinitions>
                                <!-- Modify to 'Height="*"' intead of 'Height="Auto"'-->
                                <RowDefinition Height="*" />
                                <!-- Modify to 'Height="Auto"' intead of 'Height="*"'-->
                                <RowDefinition Height="Auto" />
                                <!-- Delete' RowDefinition -->
                                <!--<RowDefinition Height="Auto" />-->
                            </Grid.RowDefinitions>
                            <ScrollViewer x:Name="ContentScrollViewer"
                                            HorizontalScrollBarVisibility="Disabled"
                                            VerticalScrollBarVisibility="Disabled"
                                            ZoomMode="Disabled"
                                            Margin="{ThemeResource ContentDialogContentScrollViewerMargin}"
                                            IsTabStop="False">
                                <Grid>
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="Auto" />
                                        <!-- Delete 'Height="Auto"' of RowDefinition.-->
                                        <RowDefinition />
                                    </Grid.RowDefinitions>
                                    <ContentControl x:Name="Title"
                                                    Margin="{ThemeResource ContentDialogTitleMargin}"
                                                    Content="{TemplateBinding Title}"
                                                    ContentTemplate="{TemplateBinding TitleTemplate}"
                                                    FontSize="20"
                                                    FontFamily="Segoe UI"
                                                    FontWeight="Normal"
                                                    Foreground="{TemplateBinding Foreground}"
                                                    HorizontalAlignment="Left"
                                                    VerticalAlignment="Top"
                                                    IsTabStop="False"
                                                    MaxHeight="{ThemeResource ContentDialogTitleMaxHeight}">
                                        <ContentControl.Template>
                                            <ControlTemplate TargetType="ContentControl">
                                                <ContentPresenter Content="{TemplateBinding Content}"
                                                                    MaxLines="2"
                                                                    TextWrapping="Wrap"
                                                                    ContentTemplate="{TemplateBinding ContentTemplate}"
                                                                    Margin="{TemplateBinding Padding}"
                                                                    ContentTransitions="{TemplateBinding ContentTransitions}"
                                                                    HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                                                    VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
                                            </ControlTemplate>
                                        </ContentControl.Template>
                                    </ContentControl>
                                    <ContentPresenter x:Name="Content"
                                                        ContentTemplate="{TemplateBinding ContentTemplate}"
                                                        Content="{TemplateBinding Content}"
                                                        FontSize="{ThemeResource ControlContentThemeFontSize}"
                                                        FontFamily="{ThemeResource ContentControlThemeFontFamily}"
                                                        Margin="{ThemeResource ContentDialogContentMargin}"
                                                        Foreground="{TemplateBinding Foreground}"
                                                        Grid.Row="1"
                                                        TextWrapping="Wrap" />
                                </Grid>
                            </ScrollViewer>
                            <Grid x:Name="CommandSpace"
                                    Grid.Row="1"
                                    HorizontalAlignment="Stretch"
                                    VerticalAlignment="Bottom">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition />
                                    <ColumnDefinition />
                                </Grid.ColumnDefinitions>
                                <Border x:Name="Button1Host"
                                        Margin="{ThemeResource ContentDialogButton1HostMargin}"
                                        MinWidth="{ThemeResource ContentDialogButtonMinWidth}"
                                        MaxWidth="{ThemeResource ContentDialogButtonMaxWidth}"
                                        Height="{ThemeResource ContentDialogButtonHeight}"
                                        HorizontalAlignment="Stretch" />
                                <Border x:Name="Button2Host"
                                        Margin="{ThemeResource ContentDialogButton2HostMargin}"
                                        MinWidth="{ThemeResource ContentDialogButtonMinWidth}"
                                        MaxWidth="{ThemeResource ContentDialogButtonMaxWidth}"
                                        Height="{ThemeResource ContentDialogButtonHeight}"
                                        Grid.Column="1"
                                        HorizontalAlignment="Stretch" />
                            </Grid>
                        </Grid>
                    </Border>
                </Grid>
            </Border>
        </ControlTemplate>
    </Setter.Value>
</Setter>

希望这对你有所帮助。

此致 Juanlu

答案 2 :(得分:0)

不确定最新的SDK中是否有一些相关的增强功能,但是至少现在可以正常工作(在没有任何新XAML的对话框中显示长文本的非常简单的方法):

async Task ShowDialogAsync(string title, string text)
{
    var dialog = new ContentDialog()
    {
        Title = title,
        Content = new ScrollViewer()
        {
            Content = new TextBlock() { Text = text },
        },
        CloseButtonText = "ok"
    };

    await dialog.ShowAsync();
}