2015-05-13 3 views
0

У меня есть столбец с радиостанцией в datagrid. Я хочу сделать фон radobutton зеленым, когда он установлен, или Красный, если он не установлен. Пожалуйста, помогите мне, как это получить.Как изменить фон радиообмена, который является преснетом в WPat datagrid

<DataGrid AutoGenerateColumns="False" Height="330" HorizontalAlignment="Left" Margin="5,50,0,0" Name="grdDeviceInfo" VerticalAlignment="Top" 
      CanUserAddRows="False" IsReadOnly="True" Width="270" HorizontalScrollBarVisibility="Auto"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="Channels" Width="100" Binding="{Binding ChannelNo}"></DataGridTextColumn> 
       <DataGridTextColumn Header="Label" Width="100" Binding="{Binding Label}"></DataGridTextColumn> 
       <DataGridTemplateColumn Header="Status" Width="60"> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <RadioButton HorizontalAlignment="Center" VerticalAlignment="Center" IsEnabled="False" IsChecked="{Binding MasterStatus}" Background="#FFEB0F0F" Foreground="#FFC72B2B"></RadioButton> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 
      </DataGrid.Columns> 
     </DataGrid> 

ответ

0

Вы можете либо привязать значения фона к переменной в своем коде позади, либо изменить его на событие с щелчком или что-то в этом роде. Или вы можете назвать радиокнопку, а затем ссылаться на нее непосредственно в своем коде.

Лично я бы использовал привязки, но в любом случае работает.

Ваш Xaml будет выглядеть следующим образом

<RadioButton HorizontalAlignment="Center" VerticalAlignment="Center" IsEnabled="False" IsChecked="{Binding MasterStatus}" Background="{Binding Background}" Foreground="#FFC72B2B"></RadioButton> 

и ваш код позади будет иметь свойство, как этот

private Brush background = new SolidColorBrush(Colors.Red); 

    public Brush Background 
    { 
     get { return background; } 
     set 
     { 
      background = value; 
      OnPropertyChanged(); 
     } 
    } 

Я не знаю, как ваш базовый код работает в фоновом режиме, но в приложение для проверки, которое я сделал, я установил фон в свойстве основного состояния, например,

public bool MasterStatus 
    { 
     get { return masterStatus; } 
     set 
     { 
      masterStatus = value; 
      Background = masterStatus ? new SolidColorBrush(Colors.Green) : new SolidColorBrush(Colors.Red); 
      OnPropertyChanged(); 
     } 
    } 

Теперь я думаю, что это, вероятно, не будет делать то, что вы ожидаете. Это просто изменит цвет внутри флажка, я подозреваю, что вы хотите изменить цвет окна позади. Вы можете сделать это, изменив стиль, как предположил Бен. Используйте это как руководство https://msdn.microsoft.com/en-us/library/ms751600.aspx

или вы можете привязать свойство Background к цвету фона ячейки. Опять же, я не знаю специфики вашего приложения, которое будет для вас играть.

+0

Можете привести пример , Я точно не понял. –

+0

@sukeshkumar Я добавил код к моему ответу. Извините, я предположил, что вы знаете, что я имел в виду, когда я сказал bind свойство, потому что ваш код содержит некоторые связанные свойства. Помогает ли вам код? – Keithin8a

1

Вам нужно создать стиль для реализации этого, следующим образом:

<Style x:Key="{x:Type RadioButton}" TargetType="{x:Type RadioButton}"> 
      <Style.Triggers> 
       <Trigger Property="IsChecked" Value="true"> 
        <Setter Property = "Background" Value="Green"/> 
       </Trigger> 
       <Trigger Property="IsChecked" Value="false"> 
        <Setter Property = "Background" Value="Red"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 

Несмотря на то, что изменяет только переключатель обратно землю. если это то, чего вы так хотите! Но если вы хотите, чтобы весь выбранный стиль был отмечен \ unchecked, вам все равно нужно создать стиль, но вам нужно будет создать совершенно новый шаблон, который будет изменен в VisualStateManager (google).

+0

Привет, Спасибо за ваш ответ. У меня есть одно сомнение. Как связать этот стиль с radobutton в gridview. Я не могу изменить фон. Это класс, который я использую в коде. и привязка списка к сетке. public class IOInformation { public string ChannelNo {get; задавать; } public string Label {get; задавать; } public bool MasterStatus {get; задавать; } } –

+0

Ну, это основы использования стиля. вам нужно придать этому стилю x: ключ с именем, которое вы хотите, а затем использовать на переключателе в вашем gridview как «Style = {StaticResource RedGreenRadio}» Вы можете поместить этот стиль в ResourceDictionary или в том же представлении xaml в «UserControl.Resources», а затем вы можете использовать его только в этом представлении. –

Смежные вопросы