存储相对于元素的数据字符串的最佳方式

时间:2014-08-30 17:30:41

标签: c# wpf xaml

在元素中存储数据的最佳,最可能的proper方法是什么?

我曾经使用过分开的XML文件,现在我正在使用Tagtooltip属性。

这是一个字符串类型的数据,例如:

主题数据Theme1.fg.ffffffff;Theme2.fg.ff000000;

根据窗口大小Margin.16:9.10,5,10,5;

的边距

2 个答案:

答案 0 :(得分:0)

我理解的方式,您可以使用控件上的Tag属性来存储信息。它接受对象类型。因此你可以附加任何类型。喜欢control.Tag = objectyouwantto attach。 如果我的答案似乎不相关,请详细说明您的问题

答案 1 :(得分:0)

使用WPF / XAML,理想的方法是将这些字符串存储在相应元素的ResourcesResourceDictionary

例如

<Grid x:Name="myGrid" xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <Grid.Resources>
        <sys:String x:Key="ThemeData">Theme1.fg.ffffffff;Theme2.fg.ff000000;</sys:String>
        <sys:String x:Key="Margins">Margin.16:9.10,5,10,5;</sys:String>
    </Grid.Resources>
</Grid>

使用相同的你有两种方法

xaml方法

<TextBlock Text="{StaticResource ThemeData}" />

背后的代码

string themeData = myGrid.FindResource("ThemeData");

这些资源也可以存储在ResourceDictionary中,可以在任何元素,窗口甚至整个应用程序中进一步合并

例如

StringResources.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <sys:String x:Key="ThemeData">Theme1.fg.ffffffff;Theme2.fg.ff000000;</sys:String>
    <sys:String x:Key="Margins">Margin.16:9.10,5,10,5;</sys:String>
</ResourceDictionary>

用法

<Grid x:Name="myGrid">
    <Grid.Resources>
        <ResourceDictionary Source="StringResources.xaml" />
    </Grid.Resources>
    <TextBlock Text="{StaticResource ThemeData}" />
</Grid>

或者如果您想要合并/覆盖更多资源

<Grid x:Name="myGrid">
    <Grid.Resources>
        <ResourceDictionary xmlns:sys="clr-namespace:System;assembly=mscorlib">
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="StringResources.xaml" />
            </ResourceDictionary.MergedDictionaries>
            <!--define new resource or even override existing for this specific element -->
            <sys:String x:Key="ThemeData">Theme1.fg.ff00ff00;Theme2.fg.ff0000ff;</sys:String>
            <sys:String x:Key="NewMargins">Margin.16:9.10,5,10,5;</sys:String>
        </ResourceDictionary>
    </Grid.Resources>
    <TextBlock Text="{StaticResource ThemeData}" />
</Grid>