小编Joe*_*oel的帖子

Windows Store Universal App中的字体大小缩放(W8.1 + WP8.1)

如何在Windows应用商店通用应用程序(W8.1 + WP8.1)中缩放文本?基本上,无论使用哪种设备/分辨率,应用程序看起来都应该相同.目前的情况是布局(基于动态网格的布局)和图像比文本(字体大小)更好地缩放.

显示的文字看起来很适合WVGA分辨率(480×800),但对于1080p分辨率来说却非常小.

我已经阅读了许多内容,例如 缩放到像素密度的指南支持多种屏幕尺寸的指南

但我仍然不知道如何扩展文本以保持可读性,无论显示分辨率/ DPI.

当然,我可以编写一个使用DisplayInformation.ResolutionScale属性将字体大小转换为适当值的类.

例:

  • 带有ScaleFactor 1x的WVGA上的FontSize 16等于FontSize 16
  • 带有ScaleFactor 1.6x的WXGA上的FontSize 16等于FontSize 25,6
  • 带有ScaleFactor 1.5x的7​​20p上的FontSize 16等于FontSize 24
  • 带有ScaleFactor 2.25x的1080p上的FontSize 16等于FontSize 36

但我不确定这是否适用于所有情况.有没有更好的方法呢?我认为这样的常见任务可以通过一些内置功能来执行.

免责声明:这是(希望)不是"让我谷歌这个为你问题"我发现大量的页面是关于缩放,但它们都覆盖布局或图像.但我找不到任何有关字体大小缩放的信息.如果我错过了什么,请原谅我.


编辑:我很害怕,我没有清楚地表达问题:(左边是WVGA,右边是1080p) WVGA与1080p

xaml windows-8.1 windows-phone-8.1 win-universal-app windows-8.1-universal

20
推荐指数
3
解决办法
8590
查看次数

使用xmlns属性(命名空间)查询XDocument

我尝试从visual studio*.csproj文件中查询元素.我创建了一个简短的例子来说明问题:

    // Working
    string xml1 = @"<Project ToolsVersion='4.0'>
                      <ItemGroup Label='Usings'>
                        <Reference Include='System' />
                        <Reference Include='System.Xml' />
                      </ItemGroup>
                    </Project>"; 
    // Not working
    string xml2 = @"<Project ToolsVersion='4.0' xmlns='http://schemas.microsoft.com/developer/msbuild/2003'>
                      <ItemGroup Label='Usings'>
                        <Reference Include='System' />
                        <Reference Include='System.Xml' />
                      </ItemGroup>
                    </Project>";

    XDocument doc = XDocument.Parse(xml2);

    foreach (XElement element in doc.Descendants("ItemGroup"))
    {
        Console.WriteLine(element);
    }
Run Code Online (Sandbox Code Playgroud)

字符串xml1工作正常,xml2不返回任何内容.这些字符串之间的唯一区别是文档根目录中的xmlns属性.

我如何查询包含xmlns属性的文档?当xml文档包含xmlns属性时,为什么会出现问题?

c# xml linq-to-xml

16
推荐指数
2
解决办法
8169
查看次数

MVVM符合WPF应用程序中的本地化

如何使用MVVM模式本地化WPF应用程序?我真的想以"正确"的方式做到这一点.

我目前的方法是使用.resx资源文件来本地化我的应用程序.

Solution Explorer VS 2012

我把它们包含在我的xaml代码中

xmlns:localization="clr-namespace:ClientLibTestTool.ViewLanguages"
Run Code Online (Sandbox Code Playgroud)

并像这样访问它们:

        <Button x:Name="BtnGenerate" 
                Content="{x:Static localization:localization.ButtonGenerate}"/>
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 有没有更好的方法呢?
  2. 如何测试不同的语言(使用不同的语言设置加载应用程序)?
  3. 是否可以在运行时更改语言?

回答:

问题1:

问题2 :(谢谢你,stijn)

public MainWindow()
{
    // Debug Settings
    localization.Culture = CultureInfo.GetCultureInfo("en-US");
    // localization.Culture = CultureInfo.GetCultureInfo("de-DE");
    this.InitializeComponent();
}
Run Code Online (Sandbox Code Playgroud)

问题3 :(谢谢你,stijn)

不是真的,有必要重绘完整的窗口.

c# wpf localization mvvm mvvm-light

11
推荐指数
1
解决办法
1997
查看次数

如何格式化Windows应用商店通用应用程序(W8.1 + WP8.1)中的日期?

我正在使用可用于Windows 8.1和Windows Phone 8.1的新Windows Store Universal App模板,并且想知道如何在XAML代码中格式化字符串.

我尝试了什么(XAML):

 <TextBlock Text="{Binding TestItem.CurrentDate, StringFormat={}{0:MM/dd/yyyy}}" />
Run Code Online (Sandbox Code Playgroud)

问题是StringFormat没有Windows.UI.Xaml.Controls.TextBox.

Microsoft已经创建了一个示例项目,该项目与格式化日期有关.但是那里使用的方法基于(丑陋的)代码.

所以,这是我的问题:

  • 为什么StringFormatWindows Store Universal Apps不提供?
  • 如何仅使用XAML代码格式化字符串?


编辑: 我决定采用转换器解决方案,因为这里感兴趣的是代码:

public class DateConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (value == null)
            return null;

        if (!(value is DateTime))
            return null;

        var dateTime = (DateTime)value;

        var dateTimeFormatter = new DateTimeFormatter(YearFormat.Full,
            MonthFormat.Full,
            DayFormat.Default,
            DayOfWeekFormat.None,
            HourFormat.None,
            MinuteFormat.None,
            SecondFormat.None,
            new[] { "de-DE" …
Run Code Online (Sandbox Code Playgroud)

xaml windows-store-apps windows-8.1 windows-phone-8.1 win-universal-app

10
推荐指数
1
解决办法
6479
查看次数

"SignFile"任务没有为必需参数"CertificateThumbprint"赋值

我们有一个业务应用程序,通过clickonce部署.我可以毫无问题地构建和发布应用程序,但是当我尝试使用持续集成(构建每个签入)时,我收到以下错误:

 2>C:\Program Files (x86)\MSBuild\12.0\bin\amd64\Microsoft.Common.CurrentVersion.targets(3450,5):
Run Code Online (Sandbox Code Playgroud)

错误MSB4044:"SignFile"任务未获得所需参数"CertificateThumbprint"的值.

[C:\构建\ 1 \脉冲\ DefaultBuild\SRC \脉冲\脉冲\ Pulse.csproj]

完成执行任务"SignFile" - 失败.

我们使用代码签名证书签署应用程序(更具体地说:ClickOnce清单),该证书在AD中注册为Trusted Publisher.

证书存储在我本地工作站的证书存储中.证书也位于构建服务器的证书存储区中(1.在个人存储中,2.在TFSBuildServiceHost服务帐户的个人存储中,以及3.在tfs /构建服务器本身的个人存储中).

哪里使用Visual Studio 2013 Update 4,C#,.Net 4.5和TFS 2013 Update 4.

我不知道导致此错误的原因,任何帮助表示赞赏.


编辑:

我忘了提到几周前tfs构建工作正常.我没有更改任何东西,我验证了项目文件(Pulse.csproj)没有改变,我也有一些成功的构建与精确的Pulse.csproj文件/构建定义.我很确定它必须是tfs服务器上的东西.我记得微软在证书基础设施的一些更新方面有些问题吗?


编辑2: 我尝试使用此命令通过命令行构建项目:

"C:\ Program Files(x86)\ MSBuild\12.0\bin\amd64\MSBuild.exe"C:\ Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse.sln

构建失败,并显示以下消息:

CleanPublishFolder:删除目录"bin\Debug\app.publish \"._DeploymentComputeClickOnceManifestInfo:创建目录"bin\Debug\app.publish".
将文件从"obj\Debug\Pulse.exe"复制到"bin\Debug\app.publish\Pulse.exe".C:\ Program Files(x86)\ MSBuild\12.0\bin\amd64\Microsoft.Common.CurrentVersion.targets(3450,5):错误MSB3482:注册时发生错误:找不到SignTool.exe.[C:\ Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse\Pulse.csproj]完成构建项目"C:\ Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse\Pulse.csproj"(默认目标) ) - 失败.

完成构建项目"C:\ Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse.sln"(默认目标) - 失败.

建立失败.

"C:\ Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse.sln"(默认目标)(1) - >"C:\ Builds\1\Pulse\DefaultBuild\src\Pulse\Pulse\Pulse.csproj "(默认目标)(2) - >(_ DeploymentComputeClickOnceManifestInfo target) - > C:\ Program Files(x86)\ MSBuild\12.0\bin\amd64\Microsoft.Common.CurrentVersion.targets(3450,5):错误MSB3482:An sig ning时发生错误:找不到SignTool.exe.[C:\构建\ 1 \脉冲\ DefaultBuild\SRC \脉冲\脉冲\ Pulse.csproj]

0 Warning(s)
1 …
Run Code Online (Sandbox Code Playgroud)

msbuild clickonce code-signing certificate tfs2013

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

如何在不违反MVVM模式的情况下从WPF中的TabControl更改Tab

我的WPF Windows包含一个TabControl,它显示不同选项卡上的内容.单击下面的按钮可通过ICommand接口/ Binding执行方法.被调用的方法生成要在第二个选项卡中显示的文本.

应用程序样机

如何在不违反MVVM模式的情况下切换到按钮单击时的第二个选项卡?

我试图将TabItem.IsSelected属性绑定到我的ViewModel中的某些内容,但我也想使用其他标签(tab1).

有什么想法吗?

c# wpf design-patterns mvvm mvvm-light

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

选择包含特定属性的所有xml节点

我必须选择包含具有特定名称的属性的所有节点.

这是我目前的工作方法.

public List<string> RetrieveValuesForAttribute(string attributeName)
{
    var list = new List<string>();

    string xpath = "//*[@Name='" + attributeName + "']";
    XmlNodeList xmlNodeList = document.SelectNodes(xpath);

    foreach (XmlNode xmlNode in xmlNodeList)
    {
        list.Add(xmlNode.Attributes[attributeName].InnerText);
    }

    return list;
} 
Run Code Online (Sandbox Code Playgroud)

我尝试选择包含具有method参数中给出的名称的属性的所有节点,attributeName并将值添加到变量中list.

例:

这个方法调用:

List<string> result = RetrieveValuesForAttribute("itemSelectedHandler");
Run Code Online (Sandbox Code Playgroud)

应返回包含字符串"OnSelectedRelatedContactChanged"的列表

这是xml文件:

<GroupBoxWrapper id="gbRelatedContacts" text="Related Contacts">
  <TabIndex>0</TabIndex>
  <TabStop>false</TabStop>
  <PanelWrapper id="pnlRelatedContactsView" width="1350">
    <TabIndex>0</TabIndex>
    <TabStop>false</TabStop>
    <ListViewWrapper id="lvRelatedContacts" itemSelectedHandler="OnSelectedRelatedContactChanged" itemDoubleClickHandler="OnRelatedContactDoubleClick">
      <TabIndex>0</TabIndex>
      <TabStop>true</TabStop>
      <ListViewColumns>
        <Column title="Name" mapNode="Contact\Name" />
        <Column title="Lastname" mapNode="Contact\Lastname" />
      </ListViewColumns>
    </ListViewWrapper>
  </PanelWrapper>
</GroupBoxWrapper>
Run Code Online (Sandbox Code Playgroud)

进一步的问题:用LINQ解决这个问题会更好吗?

解决方案1: …

c# xml xpath

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

在Sql Server数据库架构比较中禁用更新目标按钮

我将Visual Studio 2013 Professional Update 4与多个SQL Server 2012 Enterprise服务器/实例结合使用.Idea是使用带有SQL Server项目的Visual Studio解决方案创建受版本控制的部署.

但是由于某种原因,"更新目标"和"生成脚本"按钮被禁用.

架构比较

我可以从sql server数据库更新本地数据库项目,但反过来不起作用.(见截图)

尽管我找到了一些有类似问题的人,但Google根本没有帮助.

架构比较后禁用更新目标按钮

VS2012:模式比较,禁用更新按钮

VS2012架构比较按钮已禁用

但是这些问题/博客中没有一个是关于Visual Studio 2013的,而且所提出的解决方案都没有适用于我.

问题:为什么禁用"更新目标"按钮,我必须更改以解决此问题?

注意:当然,我使用的是最新版本的SQL Server数据工具(12.0.50318.0)

t-sql deployment database-schema sql-server-2012 visual-studio-2013

7
推荐指数
2
解决办法
3243
查看次数

MVVM模式是建筑模式还是设计模式?

我已经对该主题进行了一些研究,并且已经在少数应用程序中使用了MVVM模式。

我问这个问题是因为有时MVVM被称为设计,有时被称为架构模式。

在大多数情况下,MVVM模式称为设计模式。但是我个人会投票赞成体系结构,因为对我而言,它明确定义了应用程序的体系结构(例如,三层,View,ViewModel,Model以及它们之间的交互方式)

这样的SO问答是关于建筑和设计模式之间的区别。在回答中,据说MVC是一种架构模式。几乎所有关于MVVM的解释都包含与MVC的比较。MVVM因此也是一种架构模式吗?

这个msdn文章(顺便说一句非常好)将MVVM Pattern称为设计模式,由真正应该知道其区别的人编写。

我糊涂了。设计还是建筑图案?这个词混在一起了吗?

编辑:我的学士学位论文需要知道这一点

architecture design-patterns mvvm

5
推荐指数
1
解决办法
2610
查看次数

如何重置IOC容器中的所有实例

我使用MVVM Light框架制作了一个C#WPF应用程序.我的应用程序使用ViewModelLocator该类在运行时定位视图模型.该ViewModelLocator使的使用SimpleIoc,其还配备了一流的MVVM光框架.

这是我的场景:用户登录可以使用我的应用程序.在注销时,我想处置/重置/重新创建所有viewmodel实例,以便为下一个用户提供干净的环境.

我尝试Cleanup()ViewModelLocator类中实现该方法,但它无法正常工作.不工作意味着(第二个)用户看到之前登录的用户的数据.

第一次尝试:

public static void Cleanup()
{
   SimpleIoc.Default.Reset();
}
Run Code Online (Sandbox Code Playgroud)

第二次尝试:

public static void Cleanup()
{
   SimpleIoc.Default.Unregister<LoginViewModel>();
   SimpleIoc.Default.Unregister<TaskViewModel>();

   SimpleIoc.Default.Register<LoginViewModel>();
   SimpleIoc.Default.Register<TaskViewModel>();
}
Run Code Online (Sandbox Code Playgroud)

第三次尝试(不是我想要的,但它是一种解决方法):

public static void Cleanup()
{
   // I implemented the ICleanup interface in my viewmodels
   // The cleanup method clears all my variables eg: myCollection.clear();
   SimpleIoc.Default.GetInstance<LoginViewModel>().Cleanup();
   SimpleIoc.Default.GetInstance<TaskViewModel>().Cleanup();
}
Run Code Online (Sandbox Code Playgroud)

如何重置ViewModelLocator班级中的所有实例?如果有必要,我愿意使用更先进的Ioc容器.

c# wpf ioc-container inversion-of-control mvvm-light

5
推荐指数
1
解决办法
2900
查看次数