我有兩個對象,文化和翻譯,這兩個都不復雜。文化就像一個簡單的CultureInfo,但有一個額外的領域。文化可能不會經常變化,並且不會有很多開始。不過,會有很多翻譯,每個翻譯都有一個CultureID屬性。每個翻譯都有一個TranslationID,以便您可以將翻譯鏈接在一起。數據看起來像這樣:爲控件中的轉換器提供控件的依賴屬性?
TranslationID,CultureID,Text;
1,en,你好;
1,es,Hola;
2,en,Bye;
2,es,Adios;
我想建立一個控制,我可以綁定文化列表以及翻譯列表。對於每個TranslationID,可能沒有每個文化的翻譯。所以我可能會有英文,西班牙文,德文和中文作爲我的文化,但對於「你好嗎」,我可能只有英文和德文翻譯。
同一TranslationID的翻譯列表將被綁定到該控件。在控件內部,每個文化只有一個或零個翻譯。我有一個xaml Expander元素的Listbox。每個Expander應該有一個Culture,Culture.Name屬性作爲頭。如果翻譯存在,每個擴展器的內容是一個包含該文化翻譯的文本框。如果它不存在,則TextBox爲空。到目前爲止,我有這麼多的工作。
在控件之外,可以選擇其中一種文化進行編輯翻譯,即使在控件中可以編輯任何文化的翻譯。如果發生這種情況,那很好。當前編輯文化應該做的是讓擴展器在我的控制中包含非常文化,是唯一一個在控件打開時展開的控件(控件將在Popup中)。控件中列表框中的所有其他擴展器都不應展開。我在我的控制中創建了一個依賴項屬性,該屬性採用當前編輯文化,名爲CurrentTranslationCulture。
這是我的問題所在。我嘗試使用DataTrigger和自定義轉換器來進行文化與CurrentTranslationCulture的比較。但是,由於轉換器是自己的類,因此無法訪問CurrentTranslationCulture。我嘗試將它作爲ConverterParameter傳遞,但我無法將其綁定到DataTrigger的Binding中的ConverterParamater參數。我甚至不知道這是否是我應該採取的方法。有沒有人知道這個解決方案,或者甚至更好?提前致謝。
代碼:下面的代碼不能完全工作。如果你拿出ConverterParameter,它會起作用,但是我所有的擴展器都將被關閉。在ConverterParamerter中,ElementName = labelTranslationEditor是我提供給我的控件以嘗試訪問它的名稱。
<ListBox x:Name="listTranslations" AlternationCount="2">
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type office:Culture}">
<Expander x:Name="cultureExpander" Header="{Binding Path=Name}" IsExpanded="False">
<Expander.Triggers>
</Expander.Triggers>
<TextBox x:Name="tbInsertLabelText" Style="{StaticResource popupLabelTextBox}" MinWidth="300" MaxWidth="450"
VerticalAlignment="Top" HorizontalAlignment="Right" SpellCheck.IsEnabled="True" TextWrapping="WrapWithOverflow" />
</Expander>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=CultureID, Converter={StaticResource expandedConverter}, ConverterParameter={Binding ElementName=labelTranslationEditor, Path=CurrentTranslationCulture}}" Value="false">
<Setter TargetName="cultureExpander" Property="IsExpanded" Value="false" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListBox.ItemTemplate>
爲什麼試圖重塑全球化? http://msdn.microsoft.com/en-us/library/ms788718.aspx – Will 2010-05-18 14:37:08
我們在應用程序的「靜態」部分使用全球化,如工具欄菜單。這是爲了我們的數據庫驅動的數據,這是更加動態和通用的。我不清楚原因,這不是我的電話。不幸的是,我必須處理它。 – JoeSharp 2010-05-18 19:45:25