2015-11-24 2 views
1

У меня есть окно WPF с пользовательским стилем, как это:Изменения управления имуществом, находящееся в Window.Resources из кода за

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" AllowsTransparency="True" WindowStyle="None" Width="525" Style="{DynamicResource CustomWindowStyle}"> 
<Window.Resources> 
    <Style x:Key="CustomWindowStyle" TargetType="{x:Type Window}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Window}"> 
        <Border BorderBrush="Black" BorderThickness="7" Background="{x:Null}" MouseMove="WindowMouseMove" MouseDown="WindowMouseDown"> 
          <Grid Background="Transparent" DockPanel.Dock="Top"> 

          <!--WPF Control of interest--> 
          <Border x:Name="BORDERCONTROL" HorizontalAlignment="Left" Margin="10,10,0,0" Width="20" Height="20" Background="Black" /> 
          <AdornerDecorator> 
          <ContentPresenter/> 
         </AdornerDecorator> 
         </Grid> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 
<Grid> 

</Grid> 

Я хочу изменить BorderControl фон программно, как это:

private void ChangeBackground() 
{ 
    BORDERCONTROL.Background = Brushes.Yellow; 
} 

Но я не могу получить доступ к этому элементу управления с помощью этого метода.

Есть ли простой способ изменить свойство управления, находящееся в шаблоне управления, с кода?

Спасибо за любую помощь.

ответ

1
private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     Border b = (Border)this.Template.FindName("BORDERCONTROL", this); 
     b.Background = new SolidColorBrush(Colors.Yellow); 
    } 

Это даст вам желаемый Пограничный контроль, и изменить его цвет. Но не пытайтесь получить доступ к границе в конструкторе окна, так как она всегда будет нулевой.

1

Попробуйте это:

var bor = (Border)Template.FindName("BORDERCONTROL", this); 
bor.Background = Brushes.Yellow; 
0

Если вы используете TemplateBinding вы можете связывать Background собственности окна и изменить что:

<Style x:Key="CustomWindowStyle" TargetType="{x:Type Window}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Window}"> 
        <Border BorderBrush="Black" BorderThickness="7" Background="{x:Null}" 
          MouseMove="WindowMouseMove" MouseDown="WindowMouseDown"> 
          <Grid Background="Transparent" DockPanel.Dock="Top"> 

          <!--WPF Control of interest--> 
          <Border x:Name="BORDERCONTROL" HorizontalAlignment="Left" 
            Margin="10,10,0,0" Width="20" Height="20" 
            Background="{TemplateBinding Background}" /> 
          <AdornerDecorator> 
          <ContentPresenter/> 
         </AdornerDecorator> 
         </Grid> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

private void ChangeBackground() 
{ 
    myWindow.Background = Brushes.Yellow; 
} 
+0

Спасибо за помощь. Я думаю, что решение @AnjumSKhan лучше для меня. – mchrzanowski

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