wpf在Resources.resx中添加/编辑/使用字符串值

时间:2013-06-26 14:36:18

标签: c# wpf animation storyboard

我有一个WPF应用程序,我在Resources.resx中有多个字符串值,并且Resources.resx的访问修饰符设置为public。

我的问题是我想将Resources.resx文件中的值直接检索到xml标记中,并且还想在Resources.resx中编辑该键的值。

为了编辑我使用的Resources.resx中的一些键

this.Resources["Duration_value"] = "0:0:15"; // that's a key in Resources.resx that i created

但它根本不起作用,价值保持不变。

关于第二个问题,假设我有一个带有双重动画的Storyboard的xml代码,如:

    <Storyboard x:Key="FlipIn" >
        <DoubleAnimation Storyboard.TargetProperty="(RenderTransform).(TransformGroup.Children)[1].(SkewTransform.AngleX)" From="-100" To="0" Duration="0:0:.75" DecelerationRatio=".9" />
        <DoubleAnimation Storyboard.TargetProperty="(RenderTransform).(TransformGroup.Children)[1].(SkewTransform.AngleY)" From="-100" To="0" Duration="0:0:.75" DecelerationRatio=".9" />
    </Storyboard>

假设我要更改

上的持续时间值
Duration="0:0:.75"

Duration="{ Duration_value from regex file }"

我如何在XML标记内执行此操作?我应该输入什么?我尝试使用App.Resources但找不到参考。

我也是WPF的新手。

非常感谢提前。

1 个答案:

答案 0 :(得分:2)

更改资源的做法不是很好,因为默认情况下,它们应该被冻结。冻结用于避免内存泄漏的资源。更多信息,请参阅MSDN link

在某些情况下,它可能会导致异常,例如:InvalidOperationException。但是,可以在以下形式的代码行中更改资源:

Application.Current.Resources["MyResource"] = MyNewValue;

示例

在资源中创建Duration

<Window.Resources>
    <Duration x:Key="MyDuration">0:0:0.75</Duration>
</Window.Resources>

显示在TextBlock值:

<Grid Name="MyGrid">
    <TextBlock Name="MyTextBlock" Text="{Binding Source={StaticResource MyDuration}}" />

    <Button Name="ChangeResource" Content="ChangeResource" Width="100" Height="30" Click="ChangeResource_Click" />
</Grid>

你也可以这样使用它:

<DoubleAnimation Storyboard.TargetProperty="MyControl" From="-100" To="0" Duration="{StaticResource MyDuration}" DecelerationRatio=".9" />

ChangeResource_Click的列表:

    private void ChangeResource_Click(object sender, RoutedEventArgs e)
    {
        TimeSpan MyTimespan = new TimeSpan(2, 2, 3);
        Duration DurationInCode = MyTimespan;

        // Set the new value
        Application.Current.Resources["MyDuration"] = MyTimespan;

        // Show value
        MyTextBlock.Text = Application.Current.Resources["MyDuration"].ToString();
    }

对于您要更改的资源,最好使用DynamicResource。有关详细信息,请参阅MSDN link