我有一个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的新手。
非常感谢提前。
答案 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。