标签: winrt-xaml

ListViewItem不会拉伸到ListView的宽度

我目前正在使用XAML设计一个Windows 8商店应用程序,但我有一个小的尺寸问题.我有一个带有DataTemple的ListView.

我的ListView和DataTemplate的代码如下:

<ListView x:Name="listPageItems"
          Grid.Row="1"
          SelectionMode="Extended"
          IsSwipeEnabled="False"
          ItemsSource="{Binding Mode=OneWay, Source={StaticResource items}}"
          ItemTemplate="{StaticResource NavigationItemTemplate}"
          ScrollViewer.VerticalScrollBarVisibility="Visible">

</ListView>

<DataTemplate x:Key="NavigationItemTemplate">    
        <Grid Height="75">
            <Grid.RowDefinitions>
                <RowDefinition Height="1.6*" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <Rectangle Fill="White" />
            <Rectangle Fill="{StaticResource SSEGreenBrush}"
                       Grid.Row="1" />
            <Border BorderThickness="2"
                    BorderBrush="{StaticResource SSEGreenBrush}"
                    Grid.RowSpan="2" />
            <TextBlock x:Name="textTitle"
                       Text="{Binding ClientName}"
                       Style="{StaticResource TitleTextStyle}"
                       Foreground="{StaticResource SSEBlueBrush}"
                       Margin="10,5,5,5" />
            <StackPanel Orientation="Horizontal"
                        Grid.Row="1"
                        HorizontalAlignment="Stretch">
                <TextBlock Text="Last Edit :"
                           Style="{StaticResource SubtitleTextStyle}"
                           Foreground="{StaticResource SSEBlueBrush}"
                           Margin="3,0,0,3"
                           VerticalAlignment="Center" />
                <TextBlock Text="SurveyDate"
                           Style="{StaticResource SubtitleTextStyle}"
                           Foreground="{StaticResource SSEBlueBrush}"
                           Margin="3,0,0,3"
                           VerticalAlignment="Center" />
            </StackPanel>
        </Grid>
    </DataTemplate>
Run Code Online (Sandbox Code Playgroud)

列表视图位于网格列中,其固定宽度为240. …

listviewitem windows-8 winrt-xaml

79
推荐指数
1
解决办法
3万
查看次数

在Windows Phone 8.1 Universal Apps中隐藏状态栏

如何在Windows Phone 8.1(C#,XAML)中隐藏状态栏?

Windows Phone 8它被设置做shell:SystemTray.IsVisible="False"任何页面.但它没有Windows Phone 8.1

c# winrt-xaml windows-phone-8.1 win-universal-app

48
推荐指数
2
解决办法
2万
查看次数

如何在不提交存储的情况下安装Windows 8应用程序

对于客户,我需要提供我们的Windows 8 Metro应用程序.当我部署我的解决方案或项目时,我得到一个exe但我无法安装它.我得到一个MessageError,我只能在app容器中启动exe.

如何创建我的应用程序版本以将其提供给我的客户而无需将其加载到Microsoft Store?

windows-8 windows-runtime winrt-xaml

46
推荐指数
1
解决办法
7万
查看次数

我应该将Metro应用程序的TemporaryKey.pfx文件添加到版本控制吗?

我已经创建了一个Metro风格的C#/ XAML应用程序,现在我正在尝试将它添加到版本控制(Git以及后来的GitHub).这意味着要确定哪些文件属于版本控制,哪些不属于版本控制.

当我创建Metro项目时,Visual Studio为其添加了一个名为ProjectName _TemporaryKey.pfx 的文件.根据我的阅读,.pfx文件显然与代码签名或证书或类似的东西有关.我还没有找到任何可以解释它们在Metro风格应用程序环境中的含义,或者您应该如何管理它们的内容.

我打算将我的代码推送到GitHub(在公共存储库中).从长远来看,我打算将我的应用程序放在Windows商店中.如果需要.pfx文件来构建项目,那么我最好检查它.如果它包含一个数字身份,将我识别为应用程序的作者,并且发布它将允许互联网上的任何人推送我的应用程序的新版本在我不知情的情况下访问Windows商店,我最好不要检查它.

所以我的问题是,TemporaryKey.pfx文件中有什么秘密吗?我应该将它检入我的公共存储库,还是应该将其保留在源代码管理之外?(如果我没有将它放入源代码控制中,那么会破坏什么,但后来想在另一台计算机上查看我的代码?)

pfx windows-runtime winrt-xaml

45
推荐指数
1
解决办法
7571
查看次数

在DataGrid的WinRT端口中,神秘的"没有足够的配额可用于处理此命令"

编辑9月26日

请参阅下面的完整背景.tl; dr:数据网格控件导致奇怪的异常,我正在寻找帮助隔离原因并找到解决方案.

我把它缩小了一点.我已经能够在较小的测试应用程序中重现行为,更可靠地触发不稳定的行为.

我绝对可以排除线程和(我认为)内存问题.新的应用程序不使用任务或其他线程/异步功能,我可以简单地通过向DataGrid中显示的对象类添加返回常量的属性来触发未处理的异常.这向我表明问题是在非托管资源耗尽或我尚未想到的问题.

修订后的计划结构如下.我创建了一个名为的用户控件EntityCollectionGridView,它有一个标签和一个数据网格.在控件的Loaded事件处理程序中,我将List<TestClass>数据网格分配给1000或10000行,让网格生成列.在页面OnNavigatedTo事件中的MainPage.xaml中将此用户控件实例化2-4次(或者Loaded,它似乎并不重要).如果发生异常,则会在显示MainPage后立即发生.

有趣的是,行为似乎并没有随着显示的行数而变化(它可以在10000行中可靠地工作,或者在每个网格中只有1000行可靠地失败),而是在所有网格中的总列数在给定时间加载.有20个属性显示,4个网格工作正常.有35个属性和4个网格,抛出异常.但是,如果我消除两个网格,同一个具有35个属性的类将正常工作.

请注意,我添加到TestClass20列到35列的所有属性都具有以下形式:

public string StringXYZ { get { return "asdfasdfasdfasdfasf"; } }
Run Code Online (Sandbox Code Playgroud)

因此,后备数据中没有额外的内存(同样,我认为内存压力无论如何都不是问题).

你们都觉得怎么样?同样,任务管理器中的句柄/用户对象/等看起来不错,但还有其他一些我可能会丢失的东西吗?

原帖

我一直在使用Silverlight Toolkit DataGrid到WinRT的端口,它在简单的测试(各种配置和多达10000行)中做得很好.但是,由于我试图将其嵌入到另一个WinRT应用程序中,我遇到了一个零星的异常(类型为System.Exception,在App.UnhandledException处理程序中引发),这种异常很难调试.

Not enough quota is available to process this command. (Exception from HRESULT: 0x80070718)
Run Code Online (Sandbox Code Playgroud)

该错误始终可重复,但不是确定性的.也就是说,我可以在每次运行应用程序时实现它,但并不总是通过执行相同次数的相同精确步骤来实现.错误似乎发生在页面转换(无论是向前导航到新页面还是返回到上一页),而不是(例如)更改数据网格的ItemsSource时.

应用程序结构基本上是通过层次结构的递归访问,每个层次结构级别都显示一个页面.在层次结构中当前节点的页面上,显示了每个子节点和一些孙子节点,并且对于任何子节点,可以显示数据网格.在实践中,我一直使用以下导航结构重现这一点:

Root page: shows no datagrid
  Child page: shows one datagrid and a few listviews
    Grandchild page: shows two datagrids, one bound to the
                     same source as Child page, the other one …
Run Code Online (Sandbox Code Playgroud)

c# xaml exception windows-runtime winrt-xaml

44
推荐指数
1
解决办法
3万
查看次数

以编程方式动画(平滑)ScrollViewer

有没有办法ScrollViewer在Windows Phone 8.1 Runtime中平滑地设置垂直偏移量?

我尝试过使用该ScrollViewer.ChangeView()方法,无论是否将disableAnimation参数设置为true或false,都不会对垂直偏移的更改进行动画处理.

例如:myScrollViewer.ChangeView(null, myScrollViewer.VerticalOffset + p, null, false); 偏移在没有动画的情况下更改.

我也试过使用垂直偏移中介:

/// <summary>
/// Mediator that forwards Offset property changes on to a ScrollViewer
/// instance to enable the animation of Horizontal/VerticalOffset.
/// </summary>
public sealed class ScrollViewerOffsetMediator : FrameworkElement
{
    /// <summary>
    /// ScrollViewer instance to forward Offset changes on to.
    /// </summary>
    public ScrollViewer ScrollViewer
    {
        get { return (ScrollViewer)GetValue(ScrollViewerProperty); }
        set { SetValue(ScrollViewerProperty, value); }
    }
    public static …
Run Code Online (Sandbox Code Playgroud)

c# windows-runtime winrt-xaml windows-phone-8.1

36
推荐指数
1
解决办法
5078
查看次数

WinRT-XAML中是否有Click,Tapped和PointerPressed同义词?

是否为PointerPressed,Click或Tapped创建事件处理程序是否重要?IOW,以下是否有任何功能差异:

<Button x:Name="BackButton" PointerPressed="BackButton_Click"/>    
<Button x:Name="BackButton" Click="BackButton_Click"/>    
<Button x:Name="BackButton" Tapped="BackButton_Click"/>
Run Code Online (Sandbox Code Playgroud)

xaml event-handling windows-8 winrt-xaml windows-store-apps

33
推荐指数
3
解决办法
2万
查看次数

如何访问XAML DataTemplate中的控件?

我有这个翻转视图:

<FlipView x:Name="models_list" SelectionChanged="selectionChanged">
 <FlipView.ItemTemplate>
          <DataTemplate>
                <Grid x:Name="cv">
                        <Image x:Name="img1" Source = "{Binding ModelImage}" Stretch="Fill" Tag="{Binding ModelTag}"/>
                </Grid>
           </DataTemplate>
  </FlipView.ItemTemplate>
Run Code Online (Sandbox Code Playgroud)

我想找到当前所选索引的img1.在搜索它时,我在这里的一些帖子中找到了这个方法:

private DependencyObject FindChildControl<T>(DependencyObject control, string ctrlName)
    {
        int childNumber = VisualTreeHelper.GetChildrenCount(control);
        for (int i = 0; i < childNumber; i++)
        {
            DependencyObject child = VisualTreeHelper.GetChild(control, i);
            FrameworkElement fe = child as FrameworkElement;
            // Not a framework element or is null
            if (fe == null) return null;

            if (child is T && fe.Name== ctrlName)
            {
                // Found the control so …
Run Code Online (Sandbox Code Playgroud)

c# windows-8 winrt-xaml windows-store-apps flipview

26
推荐指数
2
解决办法
5万
查看次数

如何在WinRT中的ItemContainerStyle中进行绑定?

我正在尝试将一个集合绑定到ItemsControl,将Canvas作为items面板,并将每个项目的Canvas.Left和Top绑定到项目对象上的属性.基本上我正在尝试重新创建我在博客上的这篇文章中描述的二维数据绑定,但这次是在WinRT而不是WPF.

由于ItemsControl将您的ItemTemplate内容包装在另一个UI元素(在WinRT的情况下为ContentPresenter)中,并且它是直接放置在items面板中的那些包装器/容器元素,因此必须在这些容器上设置Left和Top; 你不能只在DataTemplate中设置它们.在WPF中,使用ItemContainerStyle中的绑定很容易做到这一点,例如:

<ItemsControl.ItemContainerStyle>
    <Style>
        <Setter Property="Canvas.Left" Value="{Binding Path=X}"/>
        <Setter Property="Canvas.Top" Value="{Binding Path=Y}"/>
    </Style>
</ItemsControl.ItemContainerStyle>
Run Code Online (Sandbox Code Playgroud)

但是当我在WinRT/XAML项目中尝试同样的事情时,我什么也得不到.甚至没有绑定错误.如果我对一个值进行硬编码,它就会起作用; 但是如果我使用绑定,则该属性将保持其默认值(零),并且"输出"窗口中不显示任何绑定错误.

<ItemsControl.ItemContainerStyle>
    <Style TargetType="ContentPresenter">
        <!-- This works, so ItemContainerStyle does work in WinRT: -->
        <Setter Property="Canvas.Left" Value="200"/>
        <!-- But this silently fails, leaves Top as 0, and does not show
             any binding errors in the debugger's Output window: -->
        <Setter Property="Canvas.Top" Value="{Binding Y}"/>
    </Style>
</ItemsControl.ItemContainerStyle>
Run Code Online (Sandbox Code Playgroud)

我已经验证了ContentPresenters确实有正确的DataContext(即集合项,而不是集合本身或其他时髦的东西),所以你认为这些绑定可以正常工作.但他们似乎甚至没有得到评估.如果我在其他地方放置了一个错误的绑定,并运行调试版本,我会在调试器的Output窗口中看到绑定错误; 但是如果我在ItemContainerStyle中引用了一个无意义的属性,则不会显示绑定错误.

这是一个更完整的例子,(据我所知)应该可以在WPF中正常工作,但是在WinRT中,所有内容都保留在原点:

<ItemsControl ItemsSource="{Binding Tiles}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemContainerStyle>
        <Style …
Run Code Online (Sandbox Code Playgroud)

binding itemscontrol itemcontainerstyle windows-runtime winrt-xaml

24
推荐指数
2
解决办法
8018
查看次数

MessageDialog ShowAsync在第二个对话框上抛出accessdenied异常

我试图在Windows 8中再次尝试/取消对话框.对话框第一次显示正常,但是再次单击尝试再次失败,我在调用ShowAsync时得到访问被拒绝的异常.我不知道为什么,但奇怪的是,有时代码工作正常,当我放置断点时我没有得到异常.这里真的很无能为力

这是代码.

    async void DismissedEventHandler(SplashScreen sender, object e)
    {
        dismissed = true;
        loadFeeds();
    }
    private async void loadFeeds()
    {
        await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
        {
            try
            {
                RSSDataSource rssDataSource = (RSSDataSource)App.Current.Resources["RSSDataSource"];
                if (rssDataSource != null)
                {
                    await rssDataSource.DownloadFeeds();
                    await rssDataSource.GetFeedsAsync();
                }

                AdDataSource ads = (AdDataSource)App.Current.Resources["AdDataSource"];

                if (ads != null)
                {
                    await ads.DownloadAds();
                }
                rootFrame.Navigate(typeof(HomePageView));

                Window.Current.Content = rootFrame;
            }
            catch
            {
                ShowError();
            }

        });
    }
    async void ShowError()
    {
        // There was likely a problem initializing
        MessageDialog msg = new …
Run Code Online (Sandbox Code Playgroud)

windows messagedialog windows-8 windows-runtime winrt-xaml

24
推荐指数
2
解决办法
1万
查看次数