标签: windows-runtime

如何使用C#为我的WinRT应用程序生成MD5哈希码?

我正在创建一个MetroStyle应用程序,我想为我的字符串生成一个MD5代码.到目前为止我用过这个:

    public static string ComputeMD5(string str)
    {
        try
        {
            var alg = HashAlgorithmProvider.OpenAlgorithm("MD5");
            IBuffer buff = CryptographicBuffer.ConvertStringToBinary(str, BinaryStringEncoding.Utf8);
            var hashed = alg.HashData(buff);
            var res = CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, hashed);
            return res;
        }
        catch (Exception ex)
        {
            return null;
        }
    }
Run Code Online (Sandbox Code Playgroud)

但它会抛出类型异常,System.ArgumentOutOfRangeException并显示以下错误消息:

No mapping for the Unicode character exists in the target multi-byte code page. (Exception from HRESULT: 0x80070459)

我在这做错了什么?

.net c# microsoft-metro windows-runtime

21
推荐指数
1
解决办法
8881
查看次数

获取枚举值的自定义属性

在WinRT .NET应用程序(C#)中,我想获取在枚举值上定义的自定义属性.以下面的枚举为例:

public enum MyEnum
{
    [Display(Name="Foo")]
    EnumValue1,

    [Display(Name="Bar")]
    EnumValue2
}
Run Code Online (Sandbox Code Playgroud)

现在在"普通".NET中我知道我能够获得枚举值的自定义属性enumValue.GetType().GetMember(enumValue.ToString()).

不幸的是,在WinRT .NET中GetMember(),Type类上没有该方法.
有什么建议怎么搭这个?

================================================== ===

感谢下面的Marc,我找到了答案!以下代码用于从.NET 4.5 WinRT中的枚举值获取特定的自定义属性:

public static class EnumHelper
{
    public static T GetAttribute<T>(this Enum enumValue)
        where T : Attribute
    {
        return enumValue
            .GetType()
            .GetTypeInfo()
            .GetDeclaredField(enumValue.ToString())
            .GetCustomAttribute<T>();
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# attributes windows-runtime

21
推荐指数
1
解决办法
8667
查看次数

模拟WinRT的框架?

感觉就像我必须遗漏一些东西,但是当我为WinRT代码编写单元测试时,我无法找到任何可以使用的模拟对象框架.那里有任何支持WinRT的模拟框架吗?

我知道MoqRT,但据我所知,它在构建时执行codegen(虽然通过一个脆弱的声音集成,这不是实际构建过程的一部分),但它感觉更像是一个hack而不是一个实现.

DynamicMethod(轻量级代码生成背后的类)显然在WinRT中不可用.但似乎支持表达式树,包括它们的编译方法; 所以似乎模拟对象框架应该是可行的.

那里有任何WinRT模拟框架吗?

mocking windows-runtime

21
推荐指数
2
解决办法
2781
查看次数

在Metro应用程序C#中重新加载页面

我正在使用Windows 8 RTM和C#(VS 2012 RTM)开发metro应用程序,我坚持使用页面重新加载,任何人都可以解释我如何重新加载页面而不再导航到同一页面. 简介:我正在开发具有多语言支持的metro应用程序.当用户选择语言时,我会通过以下代码覆盖主要语言

Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "de";
Run Code Online (Sandbox Code Playgroud)

并使用此代码重新加载页面

this.Frame.Navigate(this.GetType());
Run Code Online (Sandbox Code Playgroud)

语言改为"de",但是当我在页面上按"返回"时导航相同的页面而不是导航到上一页.我想念一些东西,有人可以请你解释一下如何做到这一点.提前致谢

c# xaml windows-8 windows-runtime

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

WinRT应用程序和区域设置.根据用户的区域设置格式化日期和数字的正确方法?

关于用户的区域设置,我在Windows 8 Metro应用程序(XAML和C#)中遇到了一些问题.似乎应用程序不会尊重用户的区域设置,因此即使您的Windows 8设置为以芬兰语格式显示日期和时间,应用程序仍将使用美国格式显示它们.但这是一个很大的问题,必须有一些我不知道的东西?

为了测试这一点,我首先创建了一个WPF应用程序.应用程序只打印出CurrentCulture和格式化的DateTime.Now:

    private void Culture_Loaded_1(object sender, RoutedEventArgs e)
    {
        this.Culture.Text = System.Globalization.CultureInfo.CurrentCulture.DisplayName;
    }

    private void Date_Loaded_1(object sender, RoutedEventArgs e)
    {
        this.Date.Text = DateTime.Now.ToString();
    }
Run Code Online (Sandbox Code Playgroud)

这是我的默认区域设置: 区域设置

运行时,应用程序以芬兰语格式显示日期:

芬兰格式

然后我将区域设置更改为美国: 美国区域设置

当应用程序再次运行时,文化和格式发生了变化: 美国wpf格式化

就像我期望一切正常工作,这也是我期望WinRT应用程序的工作方式.

因此,下一步,我使用相同的代码创建了一个WinRT(XAML和C#)应用程序,并将区域设置恢复为芬兰语.问题:

Winrt格式化

即使我通过区域设置定义格式应为"芬兰语",WinRT应用程序也会以美国格式显示日期时间.然后我修改了应用程序的项目文件,并使fi-FI成为默认语言:

默认语言

此更改还修改了应用程序的文化:

芬兰冬季格式

奇怪.我将默认语言更改回其默认值,格式化已恢复为美国.然后我在项目中创建了文件夹"Strings-fi-FI",并在项目中添加了一个空的"Resources.resw".这个空文件似乎已经足够了,因为我现在正在使用芬兰格式:

资源文件 芬兰格式

只要删除空资源文件,格式就会恢复为美国:

资源文件已删除 美国格式winrt

很奇怪.

这导致了一些问题,但我认为主要的问题是:WinRT应用程序是否故意不遵循用户的区域设置(如WPF应用程序)?

c# xaml currentculture windows-runtime windows-store-apps

21
推荐指数
2
解决办法
9318
查看次数

Async和Await与HttpWebRequest.GetResponseAsync

我正在尝试在发出Web请求时使用Async和Await,并且发现它永远不会超过await行.我是通过Metro应用程序执行此操作,但我也在winforms应用程序中验证了该问题.

public async Task<string> DoSomething()
{
    string url = "http://imgur.com/gallery/VcBfl.json";
    HttpWebRequest request = HttpWebRequest.CreateHttp(url);

    var ws = await request.GetResponseAsync();

    return ws.ResponseUri.ToString(); ;
}
Run Code Online (Sandbox Code Playgroud)

如果我不使用await而是执行同步等待,它可以工作,但我需要它以异步方式运行.

我在这段代码中遗漏了什么导致await永远不会返回?

c# httpwebrequest async-await windows-8 windows-runtime

21
推荐指数
1
解决办法
4万
查看次数

WinRT-XAML中是否有WrapPanel(而不是WrapGrid)控件?

XAML StackPanel在单个方向上并排对齐控件.A WrapPanel类似但是TextWrapping="Wrap"在XAML中TextBox,当达到相应的高度或宽度时,控件"包裹"到下一列或行.

在此输入图像描述

类似但不一样的是,WrapGrid包装内容,但是在统一的网格中.虽然VariableSizedWrapGrid允许容器中的不同物品.这两种都不WrapGrids能用在外面ItemsControl.所以,他们被取消资格.

当开发人员在Visual Studio中查看他们的本机XAML工具箱时,没有WrapPanel.WPF开发人员有一个WrapPanel他们可能正在寻找这个通用工具来解决他们的场景.所以,我要问:

有没有人知道XAML-WinRT中的WrapPanel?(虚拟化的那个怎么样?)

windows-8 windows-runtime winrt-xaml windows-store-apps

21
推荐指数
1
解决办法
5525
查看次数

从数据绑定属性设置器中调用异步方法的正确方法?

现在我知道属性不支持异步/等待有充分理由.但有时您需要从属性设置器中启动一些额外的后台处理 - 一个很好的例子是MVVM场景中的数据绑定.

在我的例子中,我有一个绑定到ListView的SelectedItem的属性.当然,我立即将新值设置为支持字段,并完成属性的主要工作.但是,UI中所选项目的更改还需要触发REST服务调用,以根据现在选择的项目获取一些新数据.

所以我需要调用异步方法.显然,我无法等待它,但我也不想激活并忘记呼叫,因为在异步处理期间我可能会错过异常.

现在我的看法如下:

private Feed selectedFeed;
public Feed SelectedFeed
{
    get
    {
        return this.selectedFeed;
    }
    set
    {
        if (this.selectedFeed != value)
        {
            this.selectedFeed = value;
            RaisePropertyChanged();

            Task task = GetFeedArticles(value.Id);

            task.ContinueWith(t =>
                {
                    if (t.Status != TaskStatus.RanToCompletion)
                    {
                        MessengerInstance.Send<string>("Error description", "DisplayErrorNotification");
                    }
                });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

好的,除了事实上我可以将处理从setter转移到同步方法,这是处理这种情况的正确方法吗?有没有更好,更简洁的解决方案,我没有看到?

会非常有兴趣看到其他一些问题.我有点好奇,我无法找到关于这个具体主题的任何其他讨论,因为在MVVM应用程序中,大量使用数据绑定似乎很常见.

mvvm async-await windows-runtime winrt-async

21
推荐指数
1
解决办法
3062
查看次数

当基本身份验证使用无效凭据时,Windows.Web.Http.HttpClient#GetAsync会引发不完整的异常

我正在使用Windows运行时组件进行API调用.直到今天早些时候,我使用了HttpClient相关的模型,System.Net但转而Windows.Web使用WinRT流.

除了将using报表,交换HttpContentIHttpContent并使用WindowsRuntimeExtensions改变我IInputStreamStream为JSON.NET,我没有做什么特别的事情.然而,在我的16次测试中突然有3次失败,而之前一切都运转了

所有3个(集成)测试都验证我在使用无效凭据登录时收到错误响应.还有其他测试包括登录(但使用有效的凭据),它们工作得很好.给定的错误消息属于类型AggregateException并具有消息

System.AggregateException:发生一个或多个错误.---> System.Exception:找不到元素.

无法显示对话框,因为尚未设置父窗口句柄.

该异常包含HRESULT值.outerexception具有-2146233088与对应0x80131500的innerexception -2147023728对应的值0x80070490.这些都不是MSDN页面已知错误代码.

经过调查:

堆栈跟踪:

Result StackTrace:  
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at xx.Models.Requests.GetRequest.<ExecuteRequestAsync>d__0.MoveNext() in c:\Users\jeroen\Github\Windows-app\xx\xx\Models\Requests\Request.cs:line 17

--- End of stack trace from previous location where exception was thrown ---

   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) …
Run Code Online (Sandbox Code Playgroud)

.net c# async-await windows-runtime dotnet-httpclient

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

添加滑动手势以打开SplitView窗格

我正在尝试向UWP的SplitView控件(又名"汉堡包菜单")添加滑动手势,类似于Pivot控件的左/右滑动.如何设置手势以更改其显示模式?

在iOS 8及更高版本中,我可以使用UISplitViewController并设置presentsWithGesture属性来做到这一点,但在WinRT中没有类似的东西.

现在看完这篇博客后:http://blogs.msdn.com/b/cdndevs/archive/2015/07/10/uwp-new-controls-part-2-splitview.aspx,我意识到有DisplayMode属性在SplitView控件中,我应该使用VisualStateManager来改变它的状态但是如何使用vsm来平移左侧窗格?我不知道这可以通过vsm实现.

任何帮助/提示将不胜感激.

c# windows-runtime winrt-xaml windows-10 uwp

21
推荐指数
1
解决办法
8362
查看次数