[{"data":1,"prerenderedAt":979},["ShallowReactive",2],{"page-\u002Fcsharp\u002Favalonia\u002Favalonia的选择器":3},{"id":4,"title":5,"body":6,"description":24,"extension":973,"meta":974,"navigation":71,"path":975,"seo":976,"stem":977,"__hash__":978},"content\u002Fcsharp\u002FAvalonia\u002FAvalonia的选择器.md","Avalonia的选择器",{"type":7,"value":8,"toc":955},"minimark",[9,14,18,85,89,101,110,114,129,133,148,160,175,178,181,252,256,271,436,454,469,484,487,496,520,523,532,535,538,547,557,582,585,588,599,614,617,626,640,651,655,664,674,677,686,693,696,705,711,736,739,797,800,809,818,821,832,847,862,865,915,918,926,929,951],[10,11,13],"h2",{"id":12},"类css选择器","类CSS选择器",[15,16,17],"p",{},"Avalonia也实现了类似于CSS的一样的选择器，可以在Classes里通过编写特定的字符来选择和匹配相关的样式，比如下：",[19,20,25],"pre",{"className":21,"code":22,"language":23,"meta":24,"style":24},"language-xaml shiki shiki-themes github-light github-dark","\u003CStyle Selector=\"Button.primary\">\n    \u003CSetter Property=\"Background\" Value=\"#4CAF50\"\u002F>\n    \u003CSetter Property=\"Foreground\" Value=\"White\"\u002F>\n    \u003CSetter Property=\"Padding\" Value=\"12,8\"\u002F>\n    \u003CSetter Property=\"CornerRadius\" Value=\"4\"\u002F>\n\u003C\u002FStyle>\n\n\u003C!-- 使用自定义样式 -->\n\u003CButton Classes=\"primary\" Content=\"确认\"\u002F>\n","xaml","",[26,27,28,36,42,48,54,60,66,73,79],"code",{"__ignoreMap":24},[29,30,33],"span",{"class":31,"line":32},"line",1,[29,34,35],{},"\u003CStyle Selector=\"Button.primary\">\n",[29,37,39],{"class":31,"line":38},2,[29,40,41],{},"    \u003CSetter Property=\"Background\" Value=\"#4CAF50\"\u002F>\n",[29,43,45],{"class":31,"line":44},3,[29,46,47],{},"    \u003CSetter Property=\"Foreground\" Value=\"White\"\u002F>\n",[29,49,51],{"class":31,"line":50},4,[29,52,53],{},"    \u003CSetter Property=\"Padding\" Value=\"12,8\"\u002F>\n",[29,55,57],{"class":31,"line":56},5,[29,58,59],{},"    \u003CSetter Property=\"CornerRadius\" Value=\"4\"\u002F>\n",[29,61,63],{"class":31,"line":62},6,[29,64,65],{},"\u003C\u002FStyle>\n",[29,67,69],{"class":31,"line":68},7,[29,70,72],{"emptyLinePlaceholder":71},true,"\n",[29,74,76],{"class":31,"line":75},8,[29,77,78],{},"\u003C!-- 使用自定义样式 -->\n",[29,80,82],{"class":31,"line":81},9,[29,83,84],{},"\u003CButton Classes=\"primary\" Content=\"确认\"\u002F>\n",[86,87,88],"h3",{"id":88},"命名空间选择",[15,90,91,92,96,97,100],{},"要在类型中",[93,94,95],"strong",{},"包含XAML命名空间","，请使用",[26,98,99],{},"|","字符将命名空间和类型分隔，比如下：",[19,102,104],{"className":21,"code":103,"language":23,"meta":24,"style":24},"\u003CStyle Selector=\"local|Button\">\n",[26,105,106],{"__ignoreMap":24},[29,107,108],{"class":31,"line":32},[29,109,103],{},[86,111,113],{"id":112},"如果想通过名称来选择则需要使用","如果想通过名称来选择，则需要使用#",[19,115,117],{"className":21,"code":116,"language":23,"meta":24,"style":24},"\u003CStyle Selector=\"#myButton\">\n\u003CStyle Selector=\"Button#myButton\">\n",[26,118,119,124],{"__ignoreMap":24},[29,120,121],{"class":31,"line":32},[29,122,123],{},"\u003CStyle Selector=\"#myButton\">\n",[29,125,126],{"class":31,"line":38},[29,127,128],{},"\u003CStyle Selector=\"Button#myButton\">\n",[86,130,132],{"id":131},"如果想要通过样式来选择需要使用","如果想要通过样式来选择，需要使用.",[19,134,136],{"className":21,"code":135,"language":23,"meta":24,"style":24},"\u003CStyle Selector=\"Button.large\">\n\u003CStyle Selector=\"Button.large.red\">\n",[26,137,138,143],{"__ignoreMap":24},[29,139,140],{"class":31,"line":32},[29,141,142],{},"\u003CStyle Selector=\"Button.large\">\n",[29,144,145],{"class":31,"line":38},[29,146,147],{},"\u003CStyle Selector=\"Button.large.red\">\n",[15,149,150,153,154],{},[93,151,152],{},"伪类选择器！"," ",[155,156,157],"a",{"href":157,"rel":158},"https:\u002F\u002Fdocs.avaloniaui.net\u002Fzh-Hans\u002Fdocs\u002Freference\u002Fstyles\u002Fpseudo-classes",[159],"nofollow",[19,161,163],{"className":21,"code":162,"language":23,"meta":24,"style":24},"\u003CStyle Selector=\"Button:focus\">\n\u003CStyle Selector=\"Button.large:focus\">\n",[26,164,165,170],{"__ignoreMap":24},[29,166,167],{"class":31,"line":32},[29,168,169],{},"\u003CStyle Selector=\"Button:focus\">\n",[29,171,172],{"class":31,"line":38},[29,173,174],{},"\u003CStyle Selector=\"Button.large:focus\">\n",[86,176,177],{"id":177},"通用的伪类",[15,179,180],{},"以下伪类由InputElement定义，所有控件均可访问。",[182,183,184,198],"table",{},[185,186,187],"thead",{},[188,189,190,195],"tr",{},[191,192,194],"th",{"align":193},"left","Pseudoclass",[191,196,197],{},"Description",[199,200,201,212,222,232,242],"tbody",{},[188,202,203,209],{},[204,205,206],"td",{"align":193},[26,207,208],{},":disabled",[204,210,211],{},"The Control is disabled and cannot be interacted with.",[188,213,214,219],{},[204,215,216],{"align":193},[26,217,218],{},":pointerover",[204,220,221],{},"The Pointer is over the Control as determined by hit testing.",[188,223,224,229],{},[204,225,226],{"align":193},[26,227,228],{},":focus",[204,230,231],{},"The Control has focus.",[188,233,234,239],{},[204,235,236],{"align":193},[26,237,238],{},":focus-within",[204,240,241],{},"The Control has focus or contains a descendant that has focus.",[188,243,244,249],{},[204,245,246],{"align":193},[26,247,248],{},":focus-visible",[204,250,251],{},"The Control has focus and should show a visual indicator.",[253,254,255],"h4",{"id":255},"自定义伪类",[15,257,258,259,262,263,266,267,270],{},"在创建自定义控件时，您可以定义自定义伪类来",[93,260,261],{},"暴露控件状态","。",[26,264,265],{},"[PseudoClasses]","特性向IDE提供了您的伪类信息。这种行为是可继承的，",[93,268,269],{},"因此自定义控件会自动受益于其基类控件定义和管理的伪类","（如InputElement的:pointerover）。",[19,272,276],{"className":273,"code":274,"language":275,"meta":24,"style":24},"language-csharp shiki shiki-themes github-light github-dark","[PseudoClasses(\":left\", \":right\", \":middle\")]\npublic class AreaButton : Button\n{    \n    protected override void OnPointerMoved(PointerEventArgs e)\n    {\n        base.OnPointerMoved(e);\n        var pos = e.GetPosition(this);\n\n        if (pos.X \u003C Bounds.Width * 0.25)\n            SetAreaPseudoclasses(true, false, false);\n        else if (pos.X > Bounds.Width * 0.75)\n            SetAreaPseudoclasses(false, true, false);\n        else\n            SetAreaPseudoclasses(false, false, true);\n    }\n\n    protected override void OnPointerExited(PointerEventArgs e)\n    {\n        base.OnPointerExited(e);\n        SetAreaPseudoclasses(false, false, false);\n    }\n\n    private void SetAreaPseudoclasses(bool left, bool right, bool middle)\n    {\n        PseudoClasses.Set(\":left\", left);\n        PseudoClasses.Set(\":right\", right);\n        PseudoClasses.Set(\":middle\", middle);\n    }\n}\n","csharp",[26,277,278,283,288,293,298,303,308,313,317,322,328,334,340,346,352,358,363,369,374,380,386,391,396,402,407,413,419,425,430],{"__ignoreMap":24},[29,279,280],{"class":31,"line":32},[29,281,282],{},"[PseudoClasses(\":left\", \":right\", \":middle\")]\n",[29,284,285],{"class":31,"line":38},[29,286,287],{},"public class AreaButton : Button\n",[29,289,290],{"class":31,"line":44},[29,291,292],{},"{    \n",[29,294,295],{"class":31,"line":50},[29,296,297],{},"    protected override void OnPointerMoved(PointerEventArgs e)\n",[29,299,300],{"class":31,"line":56},[29,301,302],{},"    {\n",[29,304,305],{"class":31,"line":62},[29,306,307],{},"        base.OnPointerMoved(e);\n",[29,309,310],{"class":31,"line":68},[29,311,312],{},"        var pos = e.GetPosition(this);\n",[29,314,315],{"class":31,"line":75},[29,316,72],{"emptyLinePlaceholder":71},[29,318,319],{"class":31,"line":81},[29,320,321],{},"        if (pos.X \u003C Bounds.Width * 0.25)\n",[29,323,325],{"class":31,"line":324},10,[29,326,327],{},"            SetAreaPseudoclasses(true, false, false);\n",[29,329,331],{"class":31,"line":330},11,[29,332,333],{},"        else if (pos.X > Bounds.Width * 0.75)\n",[29,335,337],{"class":31,"line":336},12,[29,338,339],{},"            SetAreaPseudoclasses(false, true, false);\n",[29,341,343],{"class":31,"line":342},13,[29,344,345],{},"        else\n",[29,347,349],{"class":31,"line":348},14,[29,350,351],{},"            SetAreaPseudoclasses(false, false, true);\n",[29,353,355],{"class":31,"line":354},15,[29,356,357],{},"    }\n",[29,359,361],{"class":31,"line":360},16,[29,362,72],{"emptyLinePlaceholder":71},[29,364,366],{"class":31,"line":365},17,[29,367,368],{},"    protected override void OnPointerExited(PointerEventArgs e)\n",[29,370,372],{"class":31,"line":371},18,[29,373,302],{},[29,375,377],{"class":31,"line":376},19,[29,378,379],{},"        base.OnPointerExited(e);\n",[29,381,383],{"class":31,"line":382},20,[29,384,385],{},"        SetAreaPseudoclasses(false, false, false);\n",[29,387,389],{"class":31,"line":388},21,[29,390,357],{},[29,392,394],{"class":31,"line":393},22,[29,395,72],{"emptyLinePlaceholder":71},[29,397,399],{"class":31,"line":398},23,[29,400,401],{},"    private void SetAreaPseudoclasses(bool left, bool right, bool middle)\n",[29,403,405],{"class":31,"line":404},24,[29,406,302],{},[29,408,410],{"class":31,"line":409},25,[29,411,412],{},"        PseudoClasses.Set(\":left\", left);\n",[29,414,416],{"class":31,"line":415},26,[29,417,418],{},"        PseudoClasses.Set(\":right\", right);\n",[29,420,422],{"class":31,"line":421},27,[29,423,424],{},"        PseudoClasses.Set(\":middle\", middle);\n",[29,426,428],{"class":31,"line":427},28,[29,429,357],{},[29,431,433],{"class":31,"line":432},29,[29,434,435],{},"}\n",[15,437,438,445,446,449,450,453],{},[93,439,440,441,444],{},"派生选择器！",[93,442,443],{},"有趣的是，这允许您编写非常通用的","基于类别的选择器","。由于所有控件都派生自类",[26,447,448],{},"Control","，因此只选择样式类",[26,451,452],{},"margin2","的选择器可以编写如下：",[19,455,457],{"className":21,"code":456,"language":23,"meta":24,"style":24},"\u003CStyle Selector=\":is(Control).margin2\">\n\u003CStyle Selector=\":is(local|Control.margin2)\">\n",[26,458,459,464],{"__ignoreMap":24},[29,460,461],{"class":31,"line":32},[29,462,463],{},"\u003CStyle Selector=\":is(Control).margin2\">\n",[29,465,466],{"class":31,"line":38},[29,467,468],{},"\u003CStyle Selector=\":is(local|Control.margin2)\">\n",[19,470,472],{"className":21,"code":471,"language":23,"meta":24,"style":24},"\u003CStyle Selector=\":is(Button)\">\n\u003CStyle Selector=\":is(local|Button)\">\n",[26,473,474,479],{"__ignoreMap":24},[29,475,476],{"class":31,"line":32},[29,477,478],{},"\u003CStyle Selector=\":is(Button)\">\n",[29,480,481],{"class":31,"line":38},[29,482,483],{},"\u003CStyle Selector=\":is(local|Button)\">\n",[86,485,486],{"id":486},"子操作符",[19,488,490],{"className":21,"code":489,"language":23,"meta":24,"style":24},"\u003CStyle Selector=\"StackPanel > Button\">\n",[26,491,492],{"__ignoreMap":24},[29,493,494],{"class":31,"line":32},[29,495,489],{},[15,497,498,499,506,507,510,511,514,515,262],{},"通过",[93,500,501,502,505],{},"使用",[26,503,504],{},">","字符分隔两个选择器来定义子选择器","。此选择器仅匹配",[93,508,509],{},"逻辑控件树","中的",[93,512,513],{},"直接子项","。有关逻辑控件树背后的概念，请参见",[155,516,519],{"href":517,"rel":518},"https:\u002F\u002Fdocs.avaloniaui.net\u002Fzh-Hans\u002Fdocs\u002Fconcepts\u002Fcontrol-trees",[159],"这里",[86,521,522],{"id":522},"任意后代操作符",[19,524,526],{"className":21,"code":525,"language":23,"meta":24,"style":24},"\u003CStyle Selector=\"StackPanel Button\">\n",[26,527,528],{"__ignoreMap":24},[29,529,530],{"class":31,"line":32},[29,531,525],{},[15,533,534],{},"当两个选择器由空格分隔时，选择器将匹配逻辑树中的任意后代。父级在左边，后代在右边。因此，将上述选择器应用于之前的XAML示例，两个按钮都将被选择。",[86,536,537],{"id":537},"按属性匹配",[19,539,541],{"className":21,"code":540,"language":23,"meta":24,"style":24},"\u003CStyle Selector=\"Button[IsDefault=true]\">\n",[26,542,543],{"__ignoreMap":24},[29,544,545],{"class":31,"line":32},[29,546,540],{},[15,548,549,550,553,554,262],{},"您可以细化选择器，以包含属性的值。",[93,551,552],{},"属性=值对在方括号内定义","。这将匹配具有",[93,555,556],{},"指定属性设置为指定值的任何控件",[19,558,560],{"className":21,"code":559,"language":23,"meta":24,"style":24},"\u003CStackPanel Orientation=\"Horizontal\">\n   \u003CButton IsDefault=\"True\">Save\u003C\u002FButton>\n   \u003CButton>Cancel\u003C\u002FButton>   \n\u003C\u002FStackPanel>\n",[26,561,562,567,572,577],{"__ignoreMap":24},[29,563,564],{"class":31,"line":32},[29,565,566],{},"\u003CStackPanel Orientation=\"Horizontal\">\n",[29,568,569],{"class":31,"line":38},[29,570,571],{},"   \u003CButton IsDefault=\"True\">Save\u003C\u002FButton>\n",[29,573,574],{"class":31,"line":44},[29,575,576],{},"   \u003CButton>Cancel\u003C\u002FButton>   \n",[29,578,579],{"class":31,"line":50},[29,580,581],{},"\u003C\u002FStackPanel>\n",[15,583,584],{},"例如，在上面的XAML中，第一个按钮将被选择，但第二个按钮不会被选择。",[15,586,587],{},"注意：当您将附加属性用作属性匹配时，属性名必须用括号括起来。例如：",[19,589,593],{"className":590,"code":591,"language":592,"meta":24,"style":24},"language-xml shiki shiki-themes github-light github-dark","\u003CStyle Selector=\"TextBlock[(Grid.Row)=0]\">\n","xml",[26,594,595],{"__ignoreMap":24},[29,596,597],{"class":31,"line":32},[29,598,591],{},[15,600,601,602,605,608,609,262],{},"进一步注意：当您使用",[93,603,604],{},"属性匹配时，属性类型必须支持组件模型类型转换器",[26,606,607],{},"TypeConverter","类。有关更多信息，请参阅",[155,610,613],{"href":611,"rel":612},"https:\u002F\u002Flearn.microsoft.com\u002Fdotnet\u002Fapi\u002Fsystem.componentmodel.typeconverter",[159],"_Microsoft_文档",[86,615,616],{"id":616},"按模板选择",[19,618,620],{"className":21,"code":619,"language":23,"meta":24,"style":24},"\u003CStyle Selector=\"Button \u002Ftemplate\u002F ContentPresenter\">\n",[26,621,622],{"__ignoreMap":24},[29,623,624],{"class":31,"line":32},[29,625,619],{},[15,627,628,629,632,633,636,637,262],{},"您可以使用上述语法在",[93,630,631],{},"控件模板中匹配控件","。此处列出的",[93,634,635],{},"所有其他选择器都适用于逻辑树","，但",[93,638,639],{},"此选择器可以进入模板",[15,641,642,643,646,647,650],{},"在上面的示例中，",[93,644,645],{},"如果按钮具有模板，则该选择器将选择模板中的内容呈现控件","（类",[26,648,649],{},"ContentPresenter","）。",[86,652,654],{"id":653},"not-函数","Not 函数",[19,656,658],{"className":21,"code":657,"language":23,"meta":24,"style":24},"\u003CStyle Selector=\"TextBlock:not(.h1)\">\n",[26,659,660],{"__ignoreMap":24},[29,661,662],{"class":31,"line":32},[29,663,657],{},[15,665,666,667,670,673],{},"该函数否定括号中的选择。在上面的示例中，将匹配所有",[93,668,669],{},"没有",[26,671,672],{},"h1","类的文本块控件。",[86,675,676],{"id":676},"按列表选择",[19,678,680],{"className":21,"code":679,"language":23,"meta":24,"style":24},"\u003CStyle Selector=\"TextBlock, Button\">\n",[26,681,682],{"__ignoreMap":24},[29,683,684],{"class":31,"line":32},[29,685,679],{},[15,687,688,689,692],{},"您可以",[93,690,691],{},"选择与逗号分隔的选择器列表匹配的任何元素","。样式中的任何setter必须更改对所有项目都通用的属性。",[86,694,695],{"id":695},"按子元素位置公式选择",[19,697,699],{"className":21,"code":698,"language":23,"meta":24,"style":24},"\u003CStyle Selector=\"TextBlock:nth-child(2n+3)\">\n",[26,700,701],{"__ignoreMap":24},[29,702,703],{"class":31,"line":32},[29,704,698],{},[15,706,688,707,710],{},[93,708,709],{},"根据元素在相邻组内的位置进行匹配","。这与父（容器）控件的类别无关。",[15,712,713,714,717,718,723,724,729,730,735],{},"选择是基于样式中的简单公式",[26,715,716],{},"An + B","，以便 ",[93,719,720],{},[26,721,722],{},"A"," 控制步长，",[93,725,726],{},[26,727,728],{},"B"," 控制从开始位置的偏移。在nth-child公式（上面）中，将 ",[93,731,732],{},[26,733,734],{},"n"," 作为零提供给公式，以及从零开始的所有正整数，并且与子元素的基于一的位置的结果进行比较。",[15,737,738],{},"因此，对于上面的选择器：",[182,740,741,757],{},[185,742,743],{},[188,744,745,748,751,754],{},[191,746,747],{},"Child = 1",[191,749,750],{},"Child = 2",[191,752,753],{},"Child = 3",[191,755,756],{},"Child = 4",[199,758,759,770,785],{},[188,760,761,764,766,768],{},[204,762,763],{},"n=0, n=1",[204,765,763],{},[204,767,763],{},[204,769,763],{},[188,771,772,775,777,783],{},[204,773,774],{},"3, 5",[204,776,774],{},[204,778,779,782],{},[93,780,781],{},"3",", 5",[204,784,774],{},[188,786,787,790,792,795],{},[204,788,789],{},"不匹配",[204,791,789],{},[204,793,794],{},"匹配",[204,796,789],{},[86,798,799],{"id":799},"单个子元素位置",[15,801,802,803,805,806,808],{},"您可以在XAML中省略公式中的",[93,804,722],{},"和",[93,807,734],{},"，仅指定一个位置。例如，这将仅选择第3个子元素：",[19,810,812],{"className":590,"code":811,"language":592,"meta":24,"style":24},"\u003CStyle Selector=\"TextBlock:nth-child(3)\">\n",[26,813,814],{"__ignoreMap":24},[29,815,816],{"class":31,"line":32},[29,817,811],{},[86,819,820],{"id":820},"关键字符号",[15,822,823,824,827,828,831],{},"您还可以在公式中使用关键字符号：",[26,825,826],{},"odd","或",[26,829,830],{},"even","。因此，以下选择器是等效的：",[19,833,835],{"className":21,"code":834,"language":23,"meta":24,"style":24},"\u003CStyle Selector=\"TextBlock:nth-child(2n)\">\n\u003CStyle Selector=\"TextBlock:nth-child(even)\">\n",[26,836,837,842],{"__ignoreMap":24},[29,838,839],{"class":31,"line":32},[29,840,841],{},"\u003CStyle Selector=\"TextBlock:nth-child(2n)\">\n",[29,843,844],{"class":31,"line":38},[29,845,846],{},"\u003CStyle Selector=\"TextBlock:nth-child(even)\">\n",[19,848,850],{"className":21,"code":849,"language":23,"meta":24,"style":24},"\u003CStyle Selector=\"TextBlock:nth-child(2n+1)\">\n\u003CStyle Selector=\"TextBlock:nth-child(odd)\">\n",[26,851,852,857],{"__ignoreMap":24},[29,853,854],{"class":31,"line":32},[29,855,856],{},"\u003CStyle Selector=\"TextBlock:nth-child(2n+1)\">\n",[29,858,859],{"class":31,"line":38},[29,860,861],{},"\u003CStyle Selector=\"TextBlock:nth-child(odd)\">\n",[15,863,864],{},"可以通过OnPlateform来做到为不同的平台来设置不同属性：",[19,866,868],{"className":21,"code":867,"language":23,"meta":24,"style":24},"\u003CWindow>\n    \u003CWindow.TitleBarHeight>\n        \u003COnPlatform x:TypeArguments=\"double\">\n            \u003COn Platform=\"Windows\">32\u003C\u002FOn>\n            \u003COn Platform=\"macOS\">28\u003C\u002FOn>\n            \u003COn Platform=\"Linux\">30\u003C\u002FOn>\n        \u003C\u002FOnPlatform>\n    \u003C\u002FWindow.TitleBarHeight>\n\u003C\u002FWindow>\n",[26,869,870,875,880,885,890,895,900,905,910],{"__ignoreMap":24},[29,871,872],{"class":31,"line":32},[29,873,874],{},"\u003CWindow>\n",[29,876,877],{"class":31,"line":38},[29,878,879],{},"    \u003CWindow.TitleBarHeight>\n",[29,881,882],{"class":31,"line":44},[29,883,884],{},"        \u003COnPlatform x:TypeArguments=\"double\">\n",[29,886,887],{"class":31,"line":50},[29,888,889],{},"            \u003COn Platform=\"Windows\">32\u003C\u002FOn>\n",[29,891,892],{"class":31,"line":56},[29,893,894],{},"            \u003COn Platform=\"macOS\">28\u003C\u002FOn>\n",[29,896,897],{"class":31,"line":62},[29,898,899],{},"            \u003COn Platform=\"Linux\">30\u003C\u002FOn>\n",[29,901,902],{"class":31,"line":68},[29,903,904],{},"        \u003C\u002FOnPlatform>\n",[29,906,907],{"class":31,"line":75},[29,908,909],{},"    \u003C\u002FWindow.TitleBarHeight>\n",[29,911,912],{"class":31,"line":81},[29,913,914],{},"\u003C\u002FWindow>\n",[15,916,917],{},"可以根据不同平台的资源放在对应目录来让Avalonia来自动选择和加载：",[19,919,924],{"className":920,"code":922,"language":923},[921],"language-text","\u002FAssets\n  \u002FWindows\n    app_icon.png\n  \u002FLinux\n    app_icon.png\n  \u002FmacOS\n    app_icon.png\n","text",[26,925,922],{"__ignoreMap":24},[10,927,928],{"id":928},"性能分析工具",[930,931,932,939,945],"ul",{},[933,934,935,938],"li",{},[93,936,937],{},"Avalonia Inspector","：实时查看UI层级和渲染性能，定位冗余控件",[933,940,941,944],{},[93,942,943],{},"Visual Studio Profiler","：分析CPU和内存占用，识别瓶颈函数",[933,946,947,950],{},[93,948,949],{},"RenderTraceListener","：监听渲染事件，统计绘制次数",[952,953,954],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":24,"searchDepth":38,"depth":38,"links":956},[957,972],{"id":12,"depth":38,"text":13,"children":958},[959,960,961,962,963,964,965,966,967,968,969,970,971],{"id":88,"depth":44,"text":88},{"id":112,"depth":44,"text":113},{"id":131,"depth":44,"text":132},{"id":177,"depth":44,"text":177},{"id":486,"depth":44,"text":486},{"id":522,"depth":44,"text":522},{"id":537,"depth":44,"text":537},{"id":616,"depth":44,"text":616},{"id":653,"depth":44,"text":654},{"id":676,"depth":44,"text":676},{"id":695,"depth":44,"text":695},{"id":799,"depth":44,"text":799},{"id":820,"depth":44,"text":820},{"id":928,"depth":38,"text":928},"md",{},"\u002Fcsharp\u002Favalonia\u002Favalonia的选择器",{"description":24},"csharp\u002FAvalonia\u002FAvalonia的选择器","xn4qy8RCk-k1_rGxwd5JX6HJBPWbhRtPlRPKy7fNHNg",1791042464858]