2017-01-05 3 views
0

Я определил DataTemplate, который содержит текстовое поле. В режиме «перчаток» мне нужен большой шрифт/minHeight, поэтому сенсорный экран работает красиво, но в «офисном режиме» мне нужен другой набор значений. Я считаю, что это должно быть возможно, но не может понять это.Как я могу сбросить темуResource DataTemplate?

Как изменить тему в коде позади? Или, если это совершенно неправильно, как мне это сделать?

Стили:

<Style x:Key="GloveTextBoxStyle" TargetType="TextBox"> 
    <Setter Property="FontSize" Value="30"/> 
    <Setter Property="MinHeight" Value="60"/> 
</Style> 
<Style x:Key="OfficeTextBoxStyle" TargetType="TextBox"> 
    <Setter Property="FontSize" Value="14"/> 
    <Setter Property="MinHeight" Value="30"/> 
</Style> 

DataTemplate:

<DataTemplate x:Key="InspectionItemStringTemplate" x:DataType="data:InspectionItem"><TextBox Text="{x:Bind NewValue,Mode=TwoWay}" 
        x:Name="MyTextBox" 
        x:Phase="1" Style="{ThemeResource GloveTextBoxStyle}"/></DataTemplate> 

ответ

2

насчет IValueConverter? Вы можете создать что-то вроде этого:

public class TextBoxStyleConverter : IValueConverter 
{ 
    public Style GloveTextBoxStyle { get; set; } 

    public Style OfficeTextBoxStyle { get; set; } 

    public object Convert(object value, Type targetType, object parameter, string language) 
    {     
     // analyze binded value and return needed style 
     return condition ? GloveTextBoxStyle : OfficeTextBoxStyle; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     throw new NotImplementedException(); 
    } 
} 

и в коде XAML

<local:TextBoxStyleConverter x:Key="TextBoxStyleConverter"> 
     <local:TextBoxStyleConverter.GloveTextBoxStyle> 
      <Style TargetType="TextBox"> 
       <Setter Property="FontSize" Value="30"/> 
       <Setter Property="MinHeight" Value="60"/> 
      </Style> 
     </local:TextBoxStyleConverter.GloveTextBoxStyle> 
     <local:TextBoxStyleConverter.OfficeTextBoxStyle> 
      <Style TargetType="TextBox"> 
       <Setter Property="FontSize" Value="14"/> 
       <Setter Property="MinHeight" Value="30"/> 
      </Style> 
     </local:TextBoxStyleConverter.OfficeTextBoxStyle> 
    </local:TextBoxStyleConverter> 


    <DataTemplate x:Key="InspectionItemStringTemplate" 
        x:DataType="data:InspectionItem"> 
     <TextBox Text="{x:Bind NewValue,Mode=TwoWay}" 
       x:Name="MyTextBox" 
       x:Phase="1" 
       Style="{Binding Converter={StaticResource TextBoxStyleConverter}}"/> 
    </DataTemplate> 
Смежные вопросы