动态更改静态资源

时间:2017-03-27 16:58:20

标签: c# xaml uwp

在我的App.xaml中,我有两个资源

<x:Double x:Key="MasterGridSize">150</x:Double>
<DataTemplate x:Key="MasterGridItemTemplate">
   <Grid Width="{StaticResource MasterGridSize}" Height="{StaticResource MasterGridSize}">
   </Grid>
</DataTemplate>

当我更改MasterGridSize的值时,它不会像预期的那样更改网格大小。我怎样才能做到这一点?

我尝试了ThemeResource,当主题发生变化时,它至少会改变。

DynamicResource不可用。

我不想将MasterGridSize添加到ViewModel,因为这会导致ViewModel和某些更新代码之间存在某些依赖关系。

还有其他想法吗?

编辑:直接编辑DataTemplate也是合理的 - 我将如何实现这一目标?

2 个答案:

答案 0 :(得分:2)

您需要使用值持有者,例如BindableValueHolder中的UWP Community Toolkit

<helpers:BindableValueHolder x:Key="MasterGridSize">
    <helpers:BindableValueHolder.Value>
        <x:Double>150</x:Double>
    </helpers:BindableValueHolder.Value>
</helpers:BindableValueHolder>

<DataTemplate x:Key="MasterGridItemTemplate">
    <Grid Width="{Binding Value, Source={StaticResource MasterGridSize}}" Height="{Binding Value, Source={StaticResource MasterGridSize}}" />
</DataTemplate>

可用的源代码here

答案 1 :(得分:0)

您是否已宣布您的资源非常好?如果是,请按以下方式尝试GridLength:

<Page.Resources>
    <GridLength x:Key="FirstSize">5*</GridLength>
    <GridLength x:Key="SecondSize">4*</GridLength>
</Page.Resources>

<DataTemplate x:Key="MasterGridItemTemplate">
  <Grid Width="{StaticResource FirstSize}" Height="{StaticResource SecondSize}">
  </Grid>
</DataTemplate>