我正在创建一个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)
我在这做错了什么?
在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) 感觉就像我必须遗漏一些东西,但是当我为WinRT代码编写单元测试时,我无法找到任何可以使用的模拟对象框架.那里有任何支持WinRT的模拟框架吗?
我知道MoqRT,但据我所知,它在构建时执行codegen(虽然通过一个脆弱的声音集成,这不是实际构建过程的一部分),但它感觉更像是一个hack而不是一个实现.
DynamicMethod(轻量级代码生成背后的类)显然在WinRT中不可用.但似乎支持表达式树,包括它们的编译方法; 所以似乎模拟对象框架应该是可行的.
那里有任何WinRT模拟框架吗?
我正在使用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",但是当我在页面上按"返回"时导航相同的页面而不是导航到上一页.我想念一些东西,有人可以请你解释一下如何做到这一点.提前致谢
关于用户的区域设置,我在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)
这是我的默认区域设置:

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

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

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

这就像我期望一切正常工作,这也是我期望WinRT应用程序的工作方式.
因此,下一步,我使用相同的代码创建了一个WinRT(XAML和C#)应用程序,并将区域设置恢复为芬兰语.问题:

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

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

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

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

很奇怪.
这导致了一些问题,但我认为主要的问题是:WinRT应用程序是否故意不遵循用户的区域设置(如WPF应用程序)?
我正在尝试在发出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永远不会返回?
XAML StackPanel在单个方向上并排对齐控件.A WrapPanel类似但是TextWrapping="Wrap"在XAML中TextBox,当达到相应的高度或宽度时,控件"包裹"到下一列或行.

类似但不一样的是,WrapGrid包装内容,但是在统一的网格中.虽然VariableSizedWrapGrid允许容器中的不同物品.这两种都不WrapGrids能用在外面ItemsControl.所以,他们被取消资格.
当开发人员在Visual Studio中查看他们的本机XAML工具箱时,没有WrapPanel.WPF开发人员有一个WrapPanel他们可能正在寻找这个通用工具来解决他们的场景.所以,我要问:
有没有人知道XAML-WinRT中的WrapPanel?(虚拟化的那个怎么样?)
现在我知道属性不支持异步/等待有充分理由.但有时您需要从属性设置器中启动一些额外的后台处理 - 一个很好的例子是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应用程序中,大量使用数据绑定似乎很常见.
我正在使用Windows运行时组件进行API调用.直到今天早些时候,我使用了HttpClient相关的模型,System.Net但转而Windows.Web使用WinRT流.
除了将using报表,交换HttpContent到IHttpContent并使用WindowsRuntimeExtensions改变我IInputStream来Stream为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) 我正在尝试向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实现.
任何帮助/提示将不胜感激.
windows-runtime ×10
c# ×7
.net ×3
async-await ×3
windows-8 ×3
winrt-xaml ×2
xaml ×2
attributes ×1
mocking ×1
mvvm ×1
uwp ×1
windows-10 ×1
winrt-async ×1