【问题标题】:Fixed sized usable page with Template 10 with Hamburger?使用带有汉堡包的模板 10 固定大小的可用页面?
【发布时间】:2017-08-04 11:36:45
【问题描述】:

我正在尝试在 Template 10 UWP Hamburger 模板应用程序中创建一个绘图表面,背景中有一个模板图像。有没有办法强制主视觉空间不可滚动?当我使用以下 XAML 时,当我将应用程序窗口拉得更宽时,图像会从屏幕上展开。

        <!--  content  -->
    <StackPanel EntranceNavigationTransitionInfo.IsTargetElement="True"
                  Padding="12,8,0,0"
                  RelativePanel.AlignBottomWithPanel="True"
                  RelativePanel.AlignLeftWithPanel="True"
                  RelativePanel.AlignRightWithPanel="True"
                  RelativePanel.Below="pageHeader">
        <StackPanel Orientation="Horizontal">
            <ComboBox Name="TemplateComboBox" ItemsSource="{x:Bind _templates}" SelectionChanged="TemplateComboBox_SelectionChanged" PlaceholderText="Select a template...">
                <ComboBoxItem Content="{Binding}" />
            </ComboBox>
            <TextBlock x:Name="stateTextBox"
                   Margin="16,0,0,0"
                   Text="Current Visual State" />
        </StackPanel>
        <Grid Name="DrawingGrid" Margin="0,5,5,5" >
            <Image Name="TemplateImage" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Stretch="Uniform" />
        </Grid>
    </StackPanel>

代码隐藏中有代码可以在组合选择更改时设置图像源。我只是想让图像拉伸到当前的可视区域。

sigh 还没开始接触 Ink :(

【问题讨论】:

  • 如何设置 Image Stretch="UniformToFill" 在您的情况下工作?
  • 它实际上并没有改变输出。 Image 控件拉伸以允许它“显示”整个位图,同时保留纵横比。我说“显示”,因为大部分都在视口之外,所以看不到。我添加了一些额外的调试信息,在笔记本电脑上全屏显示,页面(包括标题栏等)的 ActualHeight 为 897,而 Image 控件的 ActualHeight 为 2802。它只会真正显示大约 870 个。跨度>

标签: c# xaml uwp template10


【解决方案1】:

您可以考虑检测可见区域的宽度和高度,然后将宽度和高度设置为图像控件的宽度和高度。

<Grid EntranceNavigationTransitionInfo.IsTargetElement="True"
              Padding="12,8,0,0"
              RelativePanel.AlignBottomWithPanel="True"
              RelativePanel.AlignLeftWithPanel="True"
              RelativePanel.AlignRightWithPanel="True"
              RelativePanel.Below="pageHeader">
        <Grid.RowDefinitions>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="9*"></RowDefinition>
        </Grid.RowDefinitions>
        <StackPanel Orientation="Horizontal">
            <ComboBox Name="TemplateComboBox" PlaceholderText="Select a template...">
                <ComboBoxItem Content="{Binding}" />
            </ComboBox>
            <TextBlock x:Name="stateTextBox"
               Margin="16,0,0,0"
               Text="Current Visual State" />
        </StackPanel>
        <Grid Margin="0,5,5,5" x:Name="grid" Grid.Row="1">
            <ScrollViewer Name="scrollviewer" Width="{Binding ElementName=grid,Path=Width}" Height="{Binding ElementName=grid,Path=Height}" ScrollViewer.VerticalScrollBarVisibility="Hidden" ScrollViewer.HorizontalScrollBarVisibility="Hidden">
                <Image Name="TemplateImage" VerticalAlignment="Stretch" Source="/Assets/pic.jpg" HorizontalAlignment="Stretch" Stretch="Uniform" />
            </ScrollViewer>
        </Grid>
</Grid>
private void Page_SizeChanged(object sender, SizeChangedEventArgs e)
{
    TemplateImage.Width = scrollviewer.ViewportWidth;
    TemplateImage.Height = scrollviewer.ViewportHeight;
}

【讨论】:

  • 这根本没有帮助。这个想法是让图像完整显示并在屏幕视口内保持其纵横比,而不管应用程序窗口(或运行它的设备)的大小。在另一个示例应用程序中,我能够完成这项工作,但它不使用 Template10。我什至让 InkCanvas 与图像的可见组件对齐,并随着图像调整大小而缩放。我根本不知道如何使图像保持在显示窗口的可见范围内。
  • @RobSpencer 没关系。您可以考虑获取可见区域并为图像控件设置宽度和高度。 ScrollViewer.ViewportWidth 返回 viewbale 内容的宽度。请注意,您应该使用 Grid 作为根面板,并使用“*”指定其行高。因为如果你使用stackPanel作为根面板,子Grid的默认高度会是0,那么你就看不到图片控件了。
  • 感谢 Xavier - 这就是我所缺少的。我认为由 RelativePanel 相关属性拉伸的 StackPanel 可以,但显然不是。我现在所做的是让图像与网格一起拉伸,但调整 InkCanvas 的大小以匹配它。
  • 对该回复的进一步说明,该方法的优点是,如果我为图像实现某种形式的缩放功能,InkCanvas 将保持不变。
猜你喜欢
  • 1970-01-01
  • 2016-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2019-06-26
  • 2019-11-05
相关资源
最近更新 更多