2012-09-25 87 views
0

我曾經有一個WinForms應用程序,我在其中使用了一個靜態類來獲取簡單的字符串資源。在這堂課裏,我可以使用不斷的琴絃。其中一個字符串由另一個常量的值和其自己的值組成。事情是這樣的:參考資源文件中的資源鍵

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

現在我有一個WPF應用程序,我使用的是資源字典,我合併適用範圍。一切工作正常,但我想要類似上面的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#代碼。有誰知道我能做到這一點?

在此先感謝!

回答

1

如果你想使用它,我XAML,這裏有兩個想法你:

理念1:一個Binding

在你的資源,只添加了Path

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

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

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

這將顯示路徑+「FileOne.txt」

(注:你可以寫任何你想要的,而不是FileOne.txt)

你可以用這種方式有自定義的東西。

理念2:一個MultiBinding

更方便你正在嘗試做恕我直言:你做到這三點Resources你定義。

如果你想的地方,這樣的路徑+ fileOne將顯示給他們打電話,只需使用(用TextBlock例子)

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

這就是你所需要的!

或者,如果您不在用戶界面中使用這些String,您仍然可以使用靜態類。但使用XAML方式更清潔imho(所有與UI相關的東西都應該留在XAML中)

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,然後綁定到它的屬性。

+0

在我的WPF應用程序中,我開始使用靜態類,就像您建議的那樣。但我想使用ResourceDictionary,因爲這是它的意思。但謝謝你的思考! ;) – Abbas