• wpf揭秘


    2.4属性元素

    以下c#和xaml是一致的

    Rectangle r = new Rectangle();
    r.Width = 40;
    r.Height = 40;
    r.Fill = Brushes.Black;
    button.Content = r;

    <Button x:Name="button" HorizontalAlignment="Left" Height="120" Margin="81,61,0,0" VerticalAlignment="Top" Width="346" Click="button_Click">
    <Button.Content>
    <Rectangle Height="40" Width="40" Fill="red">
    </Rectangle>
    </Button.Content>
    </Button>

     2.6属性扩展

    以下xaml

    <Button x:Name="button" Click="button_Click" Background="{x:Null}" Height="{x:Static SystemParameters.IconHeight}" Content="{Binding Path=Height, RelativeSource={RelativeSource Self}}">

    和c#等价

    button.Background = null;
    button.Height = SystemParameters.IconHeight;
    System.Windows.Data.Binding binding = new Binding();
    binding.Path = new PropertyPath("Height");
    binding.RelativeSource = RelativeSource.Self;
    button.SetBinding(Button.ContentProperty, binding);

    content binding含义:显示在button上的字符串

    2.7.2 集合项

    <ListBox x:Name="listBox" >
    <ListBox.Items>
    <ListBoxItem Content="Item 1"></ListBoxItem>
    <ListBoxItem Content="Item 2"></ListBoxItem>
    </ListBox.Items>
    </ListBox>

    等价于

    System.Windows.Controls.ListBoxItem li1 = new System.Windows.Controls.ListBoxItem();
    li1.Content = "Item 1";
    listBox.Items.Add(li1);

    System.Windows.Controls.ListBoxItem li2 = new System.Windows.Controls.ListBoxItem();
    li2.Content = "Item 2";
    listBox.Items.Add(li2);

     3.2逻辑树与可视树

    代码

       public MainWindow()
            {
                InitializeComponent();
                printLogicalTree(0, this);
              
            }
    
            private void button_Click(object sender, RoutedEventArgs e)
            {
                MessageBox.Show("A");
            }
    
            protected override void OnContentRendered(EventArgs e)
            {
                base.OnContentRendered(e);
                printVisualTree(0, this);
            }
            void printLogicalTree(int depth, object obj)
            {
                Debug.WriteLine(new string(' ', depth) + obj);
                if (!(obj is DependencyObject)) return;
                foreach(object child in LogicalTreeHelper.GetChildren(obj as DependencyObject))
                {
                    printLogicalTree(depth + 1, child);
                }
            }
    
            void printVisualTree(int depth, DependencyObject obj)
            {
                Debug.WriteLine(new string(' ', depth) + obj);
                if (!(obj is DependencyObject)) return;
                for(int i=0; i< VisualTreeHelper.GetChildrenCount(obj);i++)
                {
                    printVisualTree(depth + 1, VisualTreeHelper.GetChild(obj,i));
                }
            }
    

      

    输出

    WpfApplication1.MainWindow
     System.Windows.Controls.StackPanel
      System.Windows.Controls.Label: eeeeeee
       eeeeeee
      System.Windows.Controls.Label: Label
       Label
      System.Windows.Controls.Label: Label
       Label
      System.Windows.Controls.ListBox Items.Count:0
      System.Windows.Controls.StackPanel
       System.Windows.Controls.Button: Button
        Button
       System.Windows.Controls.Button: Button
        Button
      System.Windows.Controls.Primitives.StatusBar Items.Count:1
       xxx
    “WpfApplication1.vshost.exe”(CLR v4.0.30319: WpfApplication1.vshost.exe): 已加载“C:windowsMicrosoft.NetassemblyGAC_MSILPresentationFramework-SystemXmlLinqv4.0_4.0.0.0__b77a5c561934e089PresentationFramework-SystemXmlLinq.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
    “WpfApplication1.vshost.exe”(CLR v4.0.30319: WpfApplication1.vshost.exe): 已加载“C:windowsMicrosoft.NetassemblyGAC_MSILPresentationFramework-SystemXmlv4.0_4.0.0.0__b77a5c561934e089PresentationFramework-SystemXml.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
    “WpfApplication1.vshost.exe”(CLR v4.0.30319: WpfApplication1.vshost.exe): 已加载“C:windowsMicrosoft.NetassemblyGAC_MSILPresentationCore.resourcesv4.0_4.0.0.0_zh-Hans_31bf3856ad364e35PresentationCore.resources.dll”。模块已生成,不包含符号。
    “WpfApplication1.vshost.exe”(CLR v4.0.30319: WpfApplication1.vshost.exe): 已加载“C:UserscutepigAppDataLocalTempVisualStudio.XamlDiagnostics.8476WpfXamlDiagnosticsTap.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
    “WpfApplication1.vshost.exe”(CLR v4.0.30319: WpfApplication1.vshost.exe): 已加载“C:windowsassemblyGACMicrosoft.VisualStudio.OLE.Interop7.1.40304.0__b03f5f7f11d50a3aMicrosoft.VisualStudio.OLE.Interop.dll”。模块已生成,不包含符号。
    “WpfApplication1.vshost.exe”(CLR v4.0.30319: WpfApplication1.vshost.exe): 已加载“C:windowsMicrosoft.NetassemblyGAC_MSILUIAutomationTypesv4.0_4.0.0.0__31bf3856ad364e35UIAutomationTypes.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
    “WpfApplication1.vshost.exe”(CLR v4.0.30319: WpfApplication1.vshost.exe): 已加载“C:windowsMicrosoft.NetassemblyGAC_MSILAccessibilityv4.0_4.0.0.0__b03f5f7f11d50a3aAccessibility.dll”。无法查找或打开 PDB 文件。
    “WpfApplication1.vshost.exe”(CLR v4.0.30319: WpfApplication1.vshost.exe): 已加载“C:windowsMicrosoft.NetassemblyGAC_MSILUIAutomationProviderv4.0_4.0.0.0__31bf3856ad364e35UIAutomationProvider.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
    WpfApplication1.MainWindow
     System.Windows.Controls.Border
      System.Windows.Documents.AdornerDecorator
       System.Windows.Controls.ContentPresenter
        System.Windows.Controls.StackPanel
         System.Windows.Controls.Label: eeeeeee
          System.Windows.Controls.Border
           System.Windows.Controls.ContentPresenter
            System.Windows.Controls.TextBlock
         System.Windows.Controls.Label: Label
          System.Windows.Controls.Border
           System.Windows.Controls.ContentPresenter
            System.Windows.Controls.TextBlock
         System.Windows.Controls.Label: Label
          System.Windows.Controls.Border
           System.Windows.Controls.ContentPresenter
            System.Windows.Controls.TextBlock
         System.Windows.Controls.ListBox Items.Count:0
          System.Windows.Controls.Border
           System.Windows.Controls.ScrollViewer
            System.Windows.Controls.Grid
             System.Windows.Shapes.Rectangle
             System.Windows.Controls.ScrollContentPresenter
              System.Windows.Controls.ItemsPresenter
               System.Windows.Controls.VirtualizingStackPanel
              System.Windows.Documents.AdornerLayer
             System.Windows.Controls.Primitives.ScrollBar 最小值:0 最大值:0 值:0
             System.Windows.Controls.Primitives.ScrollBar 最小值:0 最大值:0 值:0
         System.Windows.Controls.StackPanel
          System.Windows.Controls.Button: Button
           Microsoft.Windows.Themes.ButtonChrome
            System.Windows.Controls.ContentPresenter
             System.Windows.Controls.TextBlock
          System.Windows.Controls.Button: Button
           Microsoft.Windows.Themes.ButtonChrome
            System.Windows.Controls.ContentPresenter
             System.Windows.Controls.TextBlock
         System.Windows.Controls.Primitives.StatusBar Items.Count:1
          System.Windows.Controls.Border
           System.Windows.Controls.ItemsPresenter
            System.Windows.Controls.DockPanel
             System.Windows.Controls.Primitives.StatusBarItem: xxx
              System.Windows.Controls.Border
               System.Windows.Controls.ContentPresenter
                System.Windows.Controls.TextBlock
       System.Windows.Documents.AdornerLayer
    线程 0xb10 已退出,返回值为 0 (0x0)。
    

      

  • 相关阅读:
    Android 图片圆角、图片圆形【转载:https://github.com/SheHuan/NiceImageView】
    fragment中嵌套listview,切换时数据出现重复加载
    fragment中嵌套listview,切换时数据出现重复加载
    Android让View的显示超出父容器
    ZooKeeper
    Redis
    kafka
    性能优化一
    RK Android7.1 禁用 USB触摸
    RK Android7.1 使用POWER按键才能开机
  • 原文地址:https://www.cnblogs.com/cutepig/p/5351455.html
Copyright © 2020-2023  润新知