1

我有一个 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

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

关于第二个问题,假设我有一个带有双重动画的情节提要的 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的新手。

提前谢谢了。

4

1 回答 1

2

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

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

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

例子

创建Durationin 资源:

<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 链接

于 2013-06-26T15:47:33.903 回答