从XAML inC#访问边框

时间:2018-01-04 16:25:14

标签: c# .net wpf visual-studio

如何在C#代码中访问XAML文件的边框? 我搜索但没有发现任何东西,对WPF来说有点新,所以不知道如何实现概念。

My current border in XAML

我想在C#中更改此元素的背景颜色。

谢谢

修改

这是整个代码

<Button x:Name="btnSNUcenik" Click="btnSNUcenik_Click">
            <Button.Template>
                <ControlTemplate TargetType="Button">
                    <DockPanel Width="215" Cursor="Hand">
                        <DockPanel.Style>
                            <Style TargetType="{x:Type DockPanel}">
                                <Setter Property="Background" Value="#2B303D"/>
                                <Style.Triggers>
                                    <Trigger Property="IsMouseOver" Value="True">
                                        <Setter Property="Background" Value="#242631"/>
                                    </Trigger>
                                </Style.Triggers>
                            </Style>
                        </DockPanel.Style>

                        <!-- right here -->
                        <Border x:Name="brdrSNUcenik" Padding="10" HorizontalAlignment="Center" Width="148">
                            <Label Content="Ucenik" Foreground="Gray" FontSize="15" VerticalContentAlignment="Center" HorizontalContentAlignment="Right" VerticalAlignment="Center" Margin="19,0,0,0"/>
                        </Border>
                        <Border Padding="10" HorizontalAlignment="Right">
                            <Border Padding="9" Background="#242631">
                                <Image x:Name="icons8_Graduation_Cap_48px_png" Height="25" Source="Images/icons8_Graduation_Cap_48px.png" Stretch="Fill" Width="25"/>
                            </Border>
                        </Border>
                    </DockPanel>
                </ControlTemplate>
            </Button.Template>
        </Button>

4 个答案:

答案 0 :(得分:3)

据我所知,您需要导航可视树以找到边框,您无法直接访问模板的内容。请参阅https://msdn.microsoft.com/en-us/library/system.windows.media.visualtreehelper(v=vs.110).aspx - 使用GetChild和GetChildrenCount,您可以深入查看可视树并检查边框,直到找到所需的对象(从按钮开始,我想)。我不确定是否有更简单的解决方案(当然,您可以编写自己的帮助方法或扩展方法以使其更容易)。

答案 1 :(得分:1)

完成@Alex Paven的答案,因为这也是我过去一直在努力解决的问题。我需要强制ComboBox的ScrollViewer没有垂直偏移,事实并非如此,并且在处理大尺寸列表时非常不舒服。 通过在generic.xaml文件中查看ComboBox的模板并使用VisualTreeHelper类,我可以进入ScrollViewer并强制事件更改它的View。

您必须执行几乎相同的过程,但您将引用自己的模板,而不是generic.xaml文件中定义的默认模板。

只需几行,就可以帮到你。

postgres-data

答案 2 :(得分:0)

正如@Alex Paven建议的那样,@AndréB让我进入VisualTreeHelper课程,经过几个小时的配置后,我终于完成了我需要的东西。我的问题的完整代码是:

for (int i = 0; i < VisualTreeHelper.GetChildrenCount(this.spSideNav); i++) // in sidenav stack panel
        {
                DependencyObject current = VisualTreeHelper.GetChild(this.spSideNav, this.currentlyActive + 1);
                if (current.GetType().Equals(typeof(Button)))
                {
                    Button btn = (Button)current;
                    btn.Background = Brushes.DarkBlue;
                    for (int j = 0; j < VisualTreeHelper.GetChildrenCount(current); j++) // in button
                    {
                        current = VisualTreeHelper.GetChild(current, j);
                        if (current.GetType().Equals(typeof(Border)))
                        {
                            for (int k = 0; k < VisualTreeHelper.GetChildrenCount(current); k++) // in border
                            {

                                current = VisualTreeHelper.GetChild(current, k);
                                Border b = (Border)current;
                                b.Background = new System.Windows.Media.SolidColorBrush((Color)ColorConverter.ConvertFromString("#00BAC0")); 
                                ..........
                                more code
                             }
                         }
                      }
                  }
           }

答案 3 :(得分:-2)

以下示例说明如何使用可扩展应用程序标记语言(XAML)和代码设置Background属性的值:

myBorder1 = new Border();
myBorder1.BorderBrush = Brushes.SlateBlue;
myBorder1.BorderThickness = new Thickness(5, 10, 15, 20);
myBorder1.Background = Brushes.AliceBlue;
myBorder1.Padding = new Thickness(5);
myBorder1.CornerRadius = new CornerRadius(15);