0

我曾经有一个 WinForms 应用程序,其中我使用静态类来获取简单的字符串资源。在这堂课中,我有可以访问的常量字符串。其中一个字符串由另一个常量的值加上它自己的值组成。像这样的东西:

private const string Path = @"C:\SomeFolder\";
public const string FileOne = Path + "FileOne.txt";
public const string FileTwo = Path + "FileTwo.txt";

现在我有一个 WPF 应用程序,我正在使用一个 ResourceDictionary,我将它合并到 Application 范围。一切正常,但我想要类似上面的 C# 代码。这是我已经拥有的:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:System="clr-namespace:System;assembly=mscorlib">

    <System:String x:Key="Path">C:\SomeFolder\</System:String>
    <System:String x:Key="FileOne">FileOne.txt</System:String>
    <System:String x:Key="FileTwo">FileTwo.txt</System:String>

</ResourceDictionary>

现在我需要一些自动添加到两个文件字符串中的东西(某种对“路径”的引用),它不需要像 C# 代码中那样是私有的。有谁知道我怎么能做到这一点?

提前致谢!

4

2 回答 2

1

您仍然可以将静态类与资源一起使用:

namespace WpfStaticResources
{
    class MyResources {
        private const string Path = @"C:\SomeFolder\";
        public const string FileOne = Path + "FileOne.txt";
        public const string FileTwo = Path + "FileTwo.txt";
    }
}

然后从您的 XAML 参考中:

<Window x:Class="WpfStaticResources.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:WpfStaticResources="clr-namespace:WpfStaticResources" 
    Title="{x:Static WpfStaticResources:MyResources.FileOne}" Height="350" Width="525">
    <Grid>

    </Grid>
</Window>

就个人而言,我宁愿不使用静态类,而是创建一个域对象,将其设置为您的 DataContext 然后绑定到它的属性。

于 2012-09-25T15:16:23.640 回答
1

如果你想在 XAML 中使用它,这里有两个想法:

想法一:一个Binding

在您的资源中,仅添加Path

<System:String x:Key="Path">C:\SomeFolder\</System:String>

而且,在您的 XAML 中的某处:

<TextBlock Text='{Binding Source={StaticResource Path}, StringFormat={}{0}FileOne.txt}' />

这将显示 Path+"FileOne.txt"

(注意:你可以写任何你想要的东西而不是 FileOne.txt )

你可以用这种方式定制东西。

想法2:一个MultiBinding

更方便您尝试做的事情恕我直言:您保留Resources您定义的这三个。

如果您想在某处调用它们以便显示 Path + fileOne,只需使用它(例如带有 a TextBlock

    <TextBlock >
        <TextBlock.Text>
            <MultiBinding StringFormat="{}{0}{1}">
                <Binding Source="{StaticResource Path}" />
                <Binding Source="{StaticResource FileOne}" />
            </MultiBinding>
        </TextBlock.Text>
    </TextBlock>

这就是你所需要的!

或者,如果您不在StringUI 中使用这些 s,您仍然可以使用静态类。但是使用 XAML 方式更清洁恕我直言(所有与 UI 相关的东西都应该保留在 XAML 中)

于 2012-09-25T15:22:05.823 回答