在WinRT(Windows 8.1 Store App)项目中,我使用SQLite.Net-PCL和SQLiteNetExtensions NuGet包将数据存储在本地SQLite数据库文件中.
我的几个数据模型(也称为表)包含类型的属性DateTimeOffset.目的是在不丢失偏移信息的情况下存储这些信息.(原因是用户可以在指定日期/时间时输入时区信息,并且此信息必须存储在数据库中.)
我知道storeDateTimeAsTicks在创建时可以设置的参数,将其设置SQLiteConnection为false强制所有DateTime属性都以ISO格式存储为文本 - 但是,这对DateTimeOffset属性没有影响,因为它们总是自动转换为UTC并存储为代表刻度的数字.
我可以想到以下4种方法:
DateTimeOffset为string属性并存储这些,或DateTime和偏移(作为TimeSpan日期类型)的部分DateTimeOffset,并将它们存储在两个单独的列中,=>但对于这两种方法,我需要向数据模型添加其他属性,DateTimeOffset使用[Ignore]属性标记原始属性,并处理手动转换(在两个方向上) - 因为我需要将其应用于大量不同的数据模型类,似乎太难维护.
DateTime和TimeSpan(偏移)部分DateTimeOffset,并维护对此单独表的引用=>但在这种情况下我需要定义一个自定义数据类型(为了指定应该如何存储DateTime和TimeSpan部分),并且不能使用默认的.NET DateTimeOffset类型
TextBlob属性以某种方式将序列化为DateTimeOffset单个文本列=>但这感觉有点hacky,我需要确保只有SQLiteNetExtensions的扩展方法用于数据库插入/更新,我仍然需要string在所有数据模型类上有一个额外的属性...
所以,我的问题是:我是否缺少一个更为直接,明显的解决方案?
在 WinRT / UWP 应用程序中(两个平台上都会出现问题),我可以通过省略属性来定义适用于某个控件的所有实例的样式x:Key,例如:
<Style TargetType="Button">
<Setter Property="Width" Value="400"/>
</Style>
Run Code Online (Sandbox Code Playgroud)
现在,除了默认样式之外,我还想将某些属性应用于某些按钮:
<Style TargetType="Button" x:Key="TallButtonStyle" BasedOn="...">
<Setter Property="Height" Value="100"/>
</Style>
Run Code Online (Sandbox Code Playgroud)
问题是:属性要填写什么BasedOn,才能让这个样式继承上面定义的默认样式?
在 WPF 中,我可以执行以下操作:
<Style TargetType="Button" x:Key="..." BasedOn="{StaticResource {x:Type Button}}">
Run Code Online (Sandbox Code Playgroud)
但是,x:Type在 WinRT / UWP 上不可用。正如这个答案所暗示的,我需要将 an 分配x:Key给默认样式,以便能够继承它:
<Style TargetType="Button" x:Key="WideButtonStyle">
<Setter Property="Width" Value="400"/>
</Style>
<Style TargetType="Button" x:Key="TallButtonStyle" BasedOn="{StaticResource Button}">
<Setter Property="Height" Value="100"/>
</Style>
Run Code Online (Sandbox Code Playgroud)
但是,在这种情况下,WideButtonStyle不再将其用作默认值,并且我需要Style="{StaticResource WideButtonStyle}"手动应用于所有按钮,这对我来说是不必要的开销。
有什么办法吗
BasedOn属性以指向相应控件的默认样式,或者x:Key属性用作给定类型的所有控件的标准?顺便说一句,这个相关主题并没有回答我的问题,因为它展示了如何覆盖 …
我使用 Azure SAS URL 将文件上传到 Blob 存储:
var blockBlob = new Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob(new System.Uri(sasUrl));
blockBlob.UploadFromFile(filePath);
Run Code Online (Sandbox Code Playgroud)
该文件存在于我的磁盘上,并且 URL 应该是正确的,因为它是从 Windows Store Ingestion API 自动检索的(并且,如果我稍微更改 URL 签名部分中的一个字符,上传会失败并显示 HTTP 403)。
然而,在检查时
var blobs = blockBlob.Container.ListBlobs();
Run Code Online (Sandbox Code Playgroud)
结果是Count = 0,所以我想知道是否上传成功?不幸的是,该UploadFromFile方法(与该UploadFromStream方法类似)没有返回类型,因此我不确定如何检索上传的结果)。
如果我尝试使用Azure 存储资源管理器连接到 SAS URL ,则列出 Blob 容器会失败,并显示错误“身份验证错误。签名字段格式不正确”。我尝试使用 URL 转义 URL 的签名部分,因为这似乎是在某些类似情况下出现该错误的原因,但这并不能解决问题。
有什么方法可以检查 blob 上传的状态吗?有人知道为什么无法使用 Azure 资源管理器连接自动生成的 URL(由 Microsoft 的官方 API 之一提供)吗?