Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÉîÈëWPF--Style
 
×÷ÕߣºÖÜÓÀºã À´Ô´£º²©¿ÍÔ° ·¢²¼ÓÚ£º2016-1-27
  3923  次浏览      29
 

Style ÓÃÀ´ÔÚÀàÐ͵IJ»Í¬ÊµÀýÖ®¼ä¹²ÏíÊôÐÔ¡¢×ÊÔ´ºÍʼþ´¦Àí³ÌÐò£¬Äú¿ÉÒÔ½« Style ¿´×÷Êǽ«Ò»×éÊôÐÔÖµÓ¦Óõ½¶à¸öÔªËØµÄ½Ý¾¶¡£

ÕâÊÇMSDNÉ϶ÔStyleµÄÃèÊö£¬·­ÒëµÄ»¹ËãÖйæÖоء£Style£¨Ñùʽ£©£¬¼òµ¥À´Ëµ£¬¾ÍÊÇÒ»ÖÖ¶ÔÊôÐÔÖµµÄÅú´¦Àí£¬ÀàËÆÓÚHtmlµÄCSS£¬¿ÉÒÔ¿ìËÙµÄÉèÖÃһϵÁÐÊôÐÔÖµµ½UIÔªËØ¡£

ʾÀý

Ò»¸ö×î¼òµ¥µÄStyleµÄÀý×Ó£º

<Window>
2: <Grid>
3: <Grid.Resources>
4: <Style TargetType="{x:Type Button}" x:Key="ButtonStyle">
5: <Setter Property="Height" Value="22"/>
6: <Setter Property="Width" Value="60"/>
7: </Style>
8: </Grid.Resources>
9: <Button Content="Button" Style="{StaticResource ButtonStyle}"/>
10: <Button Content="Button" Style="{StaticResource ButtonStyle}" Margin="156,144,286,145" />
11: </Grid>
12: </Window>

¹ØÓÚResourcesµÄ֪ʶ£¬Çë²Î¼ûMSDN£¬ÕâÀï´´½¨ÁËÒ»¸öÄ¿±êÀàÐÍΪButtonµÄButtonStyle£¬Á½¸öButtonʹÓþ²Ì¬×ÊÔ´£¨StaticResource£©µÄ²éÕÒ·½Ê½À´ÕÒµ½Õâ¸öStyle¡£StyleÖж¨ÒåÁËButtonµÄ¸ß¶È£¨Height£©ºÍ¿í¶È£¨Width£©£¬µ±Ê¹ÓÃÁËÕâ¸öStyleºó£¬Á½¸öButtonÎÞÐèÊÖ¶¯ÉèÖ㬼´¿É×Ô¶¯ÉèÖÃËüÃǵĸ߶ȺͿí¶ÈΪButtonStyleµÄÔ¤ÉèÖµ22ºÍ60¡£

Style×÷ΪÊôÐÔ£¬×ÊÔ´£¬Ê¼þµÄÅú´¦Àí£¬ËüÌṩÁËÒ»Öֽݾ¶À´¶Ô¿Ø¼þ½øÐпìËÙÉèÖã¬Ê¹ÓÃStyleµÄºÃ´¦Óжþ£º

1.°ÑһЩ¿Ø¼þµÄͨÓÃÉèÖóé³öÀ´±ä³ÉStyle£¬Ê¹ÕâЩ¿Ø¼þ¾ßÓÐͳһµÄ·ç¸ñ£¬ÐÞ¸ÄStyleÖеÄÊôÐÔÖµ¿ÉÒÔ·½±ãµÄ×÷ÓÃÔÚËùÓÐÓ¦ÓøÃStyleµÄ¿Ø¼þÉÏ¡£

2.¿ÉÒÔ¶ÔͬһÀàÐͿؼþ¶¨Òå¶à¸öStyle£¬Í¨¹ýÌæ»»StyleÀ´·½±ãµÄ¸ü¸Ä¿Ø¼þµÄÑùʽ¡£

StyleµÄÔªËØ

ÉÏÃæStyleµÄÀý×ÓÖУ¬StyleÄÚ²¿Ê¹ÓÃÁËSetterÀ´¶¨Òå¿Ø¼þÊôÐÔµÄÔ¤ÉèÖµ£¬Style²»½öÖ§³Ö¶ÔÊôÐÔµÄÅú´¦Àí£¬Ò²¿ÉÒÔ¹²Ïí×ÊÔ´ºÍʼþ´¦Àí£¬È磺

<Window>
2: <Window.Resources>
3: <Style TargetType="{x:Type Button}" x:Key="ButtonStyle">
4: <Style.Resources>
5: <SolidColorBrush x:Key="brush" Color="Yellow"/>
6: </Style.Resources>
7: <Setter Property="Height" Value="22"/>
8: <Setter Property="Width" Value="60"/>
9: <EventSetter Event="Loaded" Handler="Button_Loaded"/>
10: </Style>
11: </Window.Resources>
12: <x:Code>
13: <![CDATA[
14: void Button_Loaded(object sender, RoutedEventArgs e)
15: {
16: MessageBox.Show((sender as Button).Name + " Loaded");
17: }
18: ]]>
19: </x:Code>
20: <Grid>
21: <Button x:Name="button1" Style="{StaticResource ButtonStyle}" Background="{DynamicResource brush}"/>
22: <Button x:Name="button2" Style="{StaticResource ButtonStyle}" Background="{DynamicResource brush}" Margin="156,144,286,145" />
23: </Grid>
24: </Window>

StyleÖж¨ÒåÁË×ÊÔ´SolidColorBrush£¬¶¨ÒåÁËÊôÐÔHeightºÍWidth£¬ÒÔ¼°Ê¹ÓÃÁËEventSetterÀ´¶¨ÒåÁËLoadedʼþµÄ´¦Àí¡£

Trigger

StyleʹÓÃÁËSetterºÍEventSetterÀ´·Ö±ðÉèÖÿؼþµÄÊôÐÔºÍʼþ´¦Àí£¬SetterÕâ¸öµ¥´ÊµÄº¬ÒåÊÇÉèÖá£StyleÔÚÉè¼ÆºÃÁËÕâÁ½ÖÖÉèÖúó£¬ÓÖÒýÈëÁ˸üÏȽøµÄ˼·£ºÌõ¼þÉèÖá£

¶ÔÓÚµ¥´¿µÄSetter£º<Setter Property=¡±Height¡± Value=¡±22¡±>À´Ëµ£¬º¬ÒådzÏÔÒ×¶®£ºÉèÖø߶ÈΪ22¡£Ìõ¼þÉèÖõĺ¬ÒåÊÇ£¬ÔÚijÖÖÌõ¼þÏ£¬È¥ÉèÖÃij¸ö¶ÔÏóµÄij¸öÖµ¡£

WPFÒýÈëÁËTrigger£¨´¥·¢Æ÷£©À´´¥·¢Õâ¸öÌõ¼þ£¬ËüµÄд·¨ÊÇ£º

<Style TargetType="{x:Type Button}" x:Key="ButtonStyle">
2: <Setter Property="Width" Value="60"/>
3: <Style.Triggers>
4: <Trigger Property="IsMouseOver" Value="True">
5: <Setter Property="Width" Value="80"/>
6: </Trigger>
7: </Style.Triggers>
8: </Style>

ÕâÀïTriggerµÄº¬ÒåÊÇ£¬ÔÚButtonµÄIsMouseOverÊôÐÔ±»ÉèÖÃΪTrueµÄÌõ¼þÏ£¬ÉèÖÃButtonµÄ¿í¶È£¨Width£©Îª80¡£

ÔÚStyleÖУ¬²»ÐèÒªÖ¸¶¨Setter×÷ÓõĶÔÏó£¨TargetName£©£¬Ä¬ÈÏ×÷ÓõĶÔÏó¾ÍÊÇʹÓøÃStyleµÄ¿Ø¼þ¡£Trigger£¬×÷Ϊ´¥·¢Æ÷£¬µ±´¥·¢Ê±ÉèÖÿí¶ÈΪ80£¬µ±IsMouseOverÊôÐÔΪFalse£¬Ò²¾ÍÊÇ´¥·¢Ìõ¼þʧЧʱ£¬¿í¶È»Øµ½Ä¬ÈÏSetterµÄÉèÖÃÖµ60¡£

WPF¶¨ÒåÁËÎåÖÖTriggerÀ´×÷Ϊ´¥·¢Ìõ¼þ£¬·Ö±ðÊÇ£ºTrigger£¬DataTrigger£¬MultiTrigger£¬MultiDataTrigger£¬EventTrigger£¬ËûÃǵĴ¥·¢Ìõ¼þ·Ö±ðÊÇ£º

1.Trigger£ºÒԿؼþµÄÊôÐÔ×÷Ϊ´¥·¢Ìõ¼þ£¬ÈçÇ°ÃæµÄIsMouseOverΪTrueµÄʱºò´¥·¢¡£

2.DataTrigger£ºÒԿؼþDataContextµÄÊôÐÔ×÷Ϊ´¥·¢Ìõ¼þ¡£

3.MultiTrigger£ºÒԿؼþµÄ¶à¸öÊôÐÔ×÷Ϊ´¥·¢Ìõ¼þ¡£

4.MultiDataTrigger£ºÒԿؼþDataContextµÄ¶à¸öÊôÐÔ×÷Ϊ´¥·¢Ìõ¼þ¡£

5.EventTrigger£ºÒÔRoutedEvent×÷Ϊ´¥·¢Ìõ¼þ£¬µ±Ö¸¶¨µÄ·ÓÉʼþRaiseʱ´¥·¢¡£

¹ØÓÚÕâ5ÖÖTriggerµÄ¾ßÌåʹÓã¬Çë²Î¼ûMSDN£¬ÕâÀï¾Í²»Ïêϸ½éÉÜÁË¡£

Implicit Style

ÉÏÃæµÄÀý×ÓÖУ¬¶¼ÊÇʹÓÃStaticResourceÀ´ÉèÖÃStyleµÄ£¬µ±È»£¬ÄãÒ²¿ÉÒÔʹÓÃDynamicResourceÀ´ÉèÖÃStyle¡£ÕâÁ½ÖÖ·½Ê½¶¼ÐèÒªÄãÔÚXAML»òÕߺǫ́´úÂëÖÐÊÖ¶¯×¢Ã÷£¬ÎªÁËʹÓ÷½±ã£¬WPFÌá³öÁËÒþʽ£¨Implicit£© StyleµÄ·½Ê½ÔÊÐí×Ô¶¯ÉèÖÃStyleµ½¿Ø¼þ£¬È磺

<Window>
2: <Grid>
3: <Grid.Resources>
4: <Style TargetType="{x:Type Button}">
5: <Setter Property="Height" Value="22"/>
6: <Setter Property="Width" Value="60"/>
7: </Style>
8: </Grid.Resources>
9: <Button x:Name="button1" Style="{x:Null}"/>
10: <Button x:Name="button2" Margin="156,144,286,145" />
11: <Button x:Name="button3" Margin="196,144,0,145" />
12: </Grid>
13: </Window>

ÔÚGirdµÄResourceÖж¨ÒåStyleʱ£¬Ã»ÓиøStyleÆðÃû×Ö£¨Key£©£¬Õâ¸öStyle»á×Ô¶¯Ó¦ÓÃÔÚGridµÄËùÓÐ×ÓButtonÖУ¬Èç¹ûÏñbutton1Ò»ÑùÔÚButtonÖÐÏÔʽ¶¨ÒåÁËStyle£¨ÕâÀïÉèÖÃÁËÒ»¸ö¿ÕÖµNull£©£¬ÄÇôÕâÖÖÒþʽ£¨Implicit£©µÄStyle»á²»Æð×÷Óá£

ÉîÈëStyle

StyleÊÇÒ»¸ö²»´íµÄ¸ÅÄ×÷Ϊһ¸öPresentationµÄ¿ò¼Ü£¬°ÑUI¶ÔÏóµÄ½á¹¹£¬ÑùʽºÍÐÐΪ·ÖÀëÕâÊÇÒ»ÖֺܺõÄÉè¼Æ¡£StyleÒ²±È½ÏÈÝÒ×ÉÏÊÖ£¬ÏñËüµÄÒþʽ£¨Implicit£©StyleµÄÉè¼ÆÒ²ÊÇË®µ½Çþ³ÉµÄÏë·¨£¬µ«Êµ¼ÊʹÓÃÖÐÒ²»á³öÏÖһЩÎÊÌâ¡£ÕâЩÎÊÌâÔÚWPFÖÐÒ²»á¾­³£Óö¼û£º¸ÅÄî²»´í£¬ÃèÊö¼òµ¥£¬Ç°¾°ÃÀºÃ£¬BugÏ¡Ææ¹Å¹Ö£¬Òª°ÑÕâЩÎÊÌâ˵Çå³þ£¬¾ÍÒª´Ó¸ù±¾À´¿´£¬StyleÊǸöʲô¶«Î÷£¿

°´ÕÕͨ³£µÄÏë·¨£¬StyleÓ¦¸ÃÀàËÆÓÚÒ»¸öDictionary<string, object> setters£¬Ô¤´æÁËÊôÐÔµÄÃû×ÖºÍÔ¤ÉèÖµ£¬È»ºó×÷Óõ½UI¶ÔÏóÉÏ¡£WPFÔÚStyle´¦µÄÏë·¨ºÜ¶à£¬Î§ÈÆ×ż¸¸ö¹Ø¼ü¼¼ÊõÒ²¼ÓÈëÁ˺ܶ๦ÄÜ£¬ÏêϸµÄ½éÉÜһϣº

Style & Dependency Property

Dependency Property£¨¼ò³ÆDP£©ÊÇWPFµÄºËÐÄ£¬Style¾ÍÊÇ»ùÓÚDependency PropertyµÄ£¬¹ØÓÚDPµÄÄÚÄ»£¬Çë²Î¼ûÉîÈëWPF--ÒÀÀµÊôÐÔ¡£StyleÖеÄSetter¾ÍÊÇ×÷ÓÃÔÚDPÉϵģ¬Èç¹ûÄãÔڿؼþÖж¨ÒåÁËÒ»¸öCLRÊôÐÔ£¬StyleÊDz»ÄÜÉèÖõġ£Dependency PropertyÉè¼ÆµÄ¾«ËèÔÚÓÚ°Ñ×ֶεĴæÈ¡ºÍ¶ÔÏó£¨Dependency Object£©°þÀ뿪£¬Ò»¸öÊôÐÔÖµÄÚ²¿Óöà¸ö×Ö¶ÎÀ´´æ´¢£¬¸ù¾ÝȡֵÌõ¼þµÄÓÅÏȼ¶À´¾ö¶¨µ±Ç°ÊôÐÔÓ¦¸ÃÈ¡Äĸö×ֶΡ£

Dependency PropertyȡֵÌõ¼þµÄÓÅÏȼ¶ÊÇ£¨´ÓÉϵ½ÏÂÓÅÏȼ¶´ÓµÍµ½¸ß£©£º

public enum BaseValueSource
2: {
3: Unknown,
4: Default,
5: Inherited,
6: DefaultStyle,
7: DefaultStyleTrigger,
8: Style,
9: TemplateTrigger,
10: StyleTrigger,
11: ImplicitStyleReference,
12: ParentTemplate,
13: ParentTemplateTrigger,
14: Local
15: }

¶ÔÓÚÒ»¸ö¾ßÌåÀý×ÓÀ´Ëµ£º

<Window>
2: <Window.Resources>
3: <Style TargetType="{x:Type Button}" x:Key="ButtonStyle">
4: <Setter Property="Width" Value="60"/>
5: <Style.Triggers>
6: <Trigger Property="IsMouseOver" Value="True">
7: <Setter Property="Width" Value="80"/>
8: </Trigger>
9: </Style.Triggers>
10: </Style>
11: </Window.Resources>
12: <Grid>
13: <Button x:Name="button1" Style="{StaticResource ButtonStyle}" Background="{DynamicResource brush}" Width="20"/>
14: </Grid>
15: </Window>

µÚ4ÐÐÓÃStyleµÄSetterÉèÖÃWidth=60£¬Õâ¸öÓÅÏȼ¶ÊÇStyle£»µÚ6Ðе±IsMouseOverΪTrueʱÉèÖÃWidth=80£¬Õâ¸öÓÅÏȼ¶ÊÇStyleTrigger£»µÚ13ÐÐʹÓÃStyleµÄButton¶¨ÒåWidth=20£¬Õâ¸öÓÅÏȼ¶ÊÇLocal¡£Local¾ßÓÐ×î¸ßµÄÓÅÏȼ¶£¬ËùÒÔ¼´Ê¹Êó±êÒÆµ½ButtonÉÏ£¬µÚ6ÐеÄTriggerÒ²»áÒòΪÓÅÏȼ¶²»¹»¸ß¶ø²»Æð×÷Óá£Èç¹ûÈ¥µôÁ˵Ú13ÐÐÖеÄWidth=20£¬ÄÇôÊó±êÒÆµ½ButtonÉÏʱWidth»á±äΪ80£¬Êó±êÒÆ¿ªºó»á»Øµ½µÚ4ÐеÄÉèÖõÄ60À´¡£

Style & FrameworkElement

Style×÷Ϊһ¸öÊôÐÔ¶¨ÒåÔÚFrameworkElementÉÏ£¬ËùÓм̳Ð×ÔFrameworkElementµÄ¿Ø¼þ¶¼¿ÉÒÔʹÓÃStyle¡£FrameworkElement¶¨ÒåÁ˶à¸öStyle£ºStyle£¬ThemeStyle£¬FocusVisualStyle£º

1.FocusVisualStyle£ºÊǵ±¿Ø¼þ»ñµÃ¼üÅ̽¹µãʱ£¬ÏÔʾÔÚÍâÃæµÄÒ»¸öÐéÏß¿ò£¬Õâ¸öStyle²¢Ã»ÓÐÖ±½Ó×÷ÓÃÔÚ¶ÔÓ¦µÄFrameworkElementÉÏ£¬¶øÊǵ±¿Ø¼þ»ñµÃ¼üÅ̽¹µãʱʹÓÃAdornLayer´´½¨ÁËÒ»¸öеÄControl£¬È»ºóÔÙÕâ¸öControlÉÏʹÓÃFocusVisualStyle£¬ÔÙ°ÑËüÕÚ¸ÇÔÚ¶ÔÓ¦µÄFrameworkElementÉÏÐγÉÒ»¸öÐéÏß¿òµÄЧ¹û¡£

2.Style£º¾ÍÊÇÎÒÃÇÇ°ÃæÒ»Ö±ÉèÖõÄStyle¡£

3.ThemeStyle£ºÕâÀïÒýÈëÁËÒ»¸öThemeµÄ¸ÅÄ¾ßÌåÀ´Ì¸Ò»ÏÂËü¡£

Windows¶¨Á˺ܶàTheme£¨Ö÷Ì⣩£¬Äã¿ÉÒÔÔÚ¿ØÖÆÃæ°åÖÐÇл»Theme£¬Èçͼ£º

×îÉÏÃæµÄÁ½ÅŶ¼ÊôÓÚAeroÖ÷Ì⣬µ±´ÓAeroÖ÷ÌâÇл»µ½Windows ClassicÖ÷Ìâºó£¬ÈÎÎñÀ¸£¬´°¿ÚÒÔ¼°´°¿ÚÄڵĿؼþÍâ¹Û¶¼»á·¢Éú±ä»¯¡£ÎªÁ˸üºÃµÄÇл»Ö÷Ì⣬WPFÒýÈëÁËThemeStyleÕâ¸ö¸ÅÄî¡£µ±ÎÒÃÇʹÓÃVS2010µÄÄ£°åÉú³ÉÒ»¸ö×Ô¶¨Òå¿Ø¼þ£¨Custom Control£©ºó£¬»á×Ô¶¯Ìí¼ÓÒ»¸öThemesµÄÎļþ¼ÐÒÔ¼°Ò»¸öGeneric.xamlµÄÎļþ£¬Èçͼ£º

ÕâÀïµÄAero.NormalColor.xamlÊÇÊÖ¶¯Ìí¼ÓµÄ£¬ÏÈÂÔÈ¥²»Ì¸£¬À´Ì¸Ì¸¿Ø¼þ£¨Control£©µÄĬÈÏÑùʽ¡£

WPFĬÈÏÌṩÁËºÜ¶à¿Ø¼þ£¬Button£¬ListBox£¬TabControlµÈµÈ£¬ÎÒÃÇʹÓÃÕâЩ¿Ø¼þʱ£¬ÊÇûÓÐÖ¸¶¨ËüµÄÑùʽ£¨Style£©µÄ£¬WPFΪÎÒÃÇÌṩÁËĬÈÏStyle£¬Õâ¸öĬÈÏStyleÊÇÓëWindowsÖ÷ÌâÏà¹ØµÄ¡£±ÈÈçÎÒÃÇÇл»WindowsµÄÖ÷Ìâ´ÓAeroµ½Classic£¬WPF´°¿ÚÀïµÄ¿Ø¼þÍâ¹ÛÒ²»á·¢Éú±ä»¯¡£ÕâЩĬÈϵÄStyleÊÇÒÔResourceDictionaryµÄÐÎʽ±£´æÔÚPresentationFramework.Aero.dll£¬PresentationFramework.Classic.dllµÈdllÖеģ¬ÕâÀïµÄÃüÃû¹æÔòÊÇ£º³ÌÐò¼¯Ãû³Æ+ThemeÃû³Æ+.dll¡£

ÄÇôWPFÓÖÊÇÈçºÎ¸ù¾ÝWindowsµÄThemeÕÒµ½¶ÔÓ¦µÄThemeStyleÄØ£¿WPFÌá³öÁËThemeInfoÕâ¸öAttributeÀ´Ö¸¶¨ThemeÐÅÏ¢¡£ThemeInfoÒ»°ã¶¨ÒåÔÚProperties/AssemblyInfo.csÖУ¬È磺

1: [assembly: ThemeInfo(
2: ResourceDictionaryLocation.SourceAssembly,
3: ResourceDictionaryLocation.SourceAssembly)
4: )]

ThemeInfoÓÐÁ½¸ö²ÎÊý£¬µÚÒ»¸ö²ÎÊýÖ¸µÄÊÇThemeResource£¬µÚ¶þ¸ö²ÎÊýÖ¸µÄÊÇGenericResource£¬ËüÃǵÄÀàÐÍÊÇResourceDictionaryLocation£º

public enum ResourceDictionaryLocation
2: {
3: None = 0,
4: SourceAssembly = 1,
5: ExternalAssembly = 2,
6: }

ResourceDictionaryLocationµÄNoneÖ¸²»´æÔÚ¶ÔÓ¦µÄResource£¬SourceAssemblyÖ¸¸Ã³ÌÐò¼¯£¨Assembly£©ÖдæÔÚ¶ÔÓ¦µÄResource£¬ExternalAssemblyÖ¸¶ÔÓ¦µÄResource±£´æÔÚÍⲿµÄ³ÌÐò¼¯£¨Assembly£©ÖУ¬Õâ¸öÍⲿ³ÌÐò¼¯µÄ²éÕÒ¹æÔò¾ÍÊÇÎÒÃÇÇ°Ãæ¿´µ½µÄ£º³ÌÐò¼¯Ãû³Æ+ThemeÃû³Æ+.dll¡£

¶ÔÓÚÒ»¸ö¿Ø¼þ£¬ÎÞÂÛÊÇϵͳ×Ô´øµÄ¿Ø¼þ»¹ÊÇÎÒÃÇ×Ô¶¨ÒåµÄ¿Ø¼þ£¬WPFÆô¶¯Ê±¶¼»áͨ¹ýµ±Ç°WindowsϵͳµÄTheme²éÕÒËü¶ÔÓ¦µÄThemeStyle¡£Õâ¸ö²éÕÒ¹æÔòÊÇ£º

1.ÏÈͨ¹ý¿Ø¼þµÄÀàÐÍ£¨Type£©ÕÒµ½Ëü¶ÔÓ¦µÄ³ÌÐò¼¯£¨Assembly£©£¬È»ºó»ñÈ¡³ÌÐò¼¯ÖеÄThemeInfo£¬¿´¿´ËüµÄThemeResourceºÍGenericResourceÔÚÄÄÀï¡£Èç¹ûThemeResourceµÄÖµ²»ÊÇNone£¬ÏµÍ³»á¶ÁÈ¡µ½ThemeResource¶ÔÓ¦µÄResourceDictionary£¬ÔÚÕâ¸öResourceDictionaryÖвéÕÒÊÇ·ñ¶¨ÒåÁËTargetType={x:Type ¿Ø¼þÀàÐÍ}£¬Èç¹ûÓУ¬°Ñ¿Ø¼þµÄThemeStyleÖ¸¶¨ÎªÕâ¸öStyle¡£

2.Èç¹ûµÚÒ»²½µÄ²éÕÒʧ°Ü£¬ÄÇôGenericResourceÅÉÉÏÓ󡣬GenericÕâ¸ö´Ê±íʾһ°ã¡£WPF»á²é¿´ThemeInfoµÄµÚ¶þ¸ö²ÎÊýGenericResourceÀ´²éÕÒËüµÄThemeStyle£¬²éÕÒ¹æÔòͬµÚÒ»²½£¬Èç¹û²éÕҳɹ¦£¬°ÑÕâ¸öStyleÖ¸¶¨Îª¿Ø¼þµÄThemeStyle¡£

ÈÎÒâÒ»¸ö¿Ø¼þ£¬Èç¹û²»ÏÔʽָ¶¨ËüµÄStyle£¬²¢ÇҲ鲻µ½Ä¬ÈϵÄThemeStyle£¬Õâ¸ö¿Ø¼þÊÇûÓÐÍâ¹ÛµÄ¡£ÎªÁ˱à³Ì·½±ã£¬µ±ÎÒÃÇʹÓÃVSÌí¼Ó×Ô¶¨Òå¿Ø¼þʱ£¬VSĬÈϰïÎÒÃÇÉú³ÉÁËGeneric.xaml£¬Èç¹ûÎÒÃÇÏ£Íû×Ô¶¨ÒåµÄ¿Ø¼þÒ²ÒªÖ§³ÖϵͳµÄTheme±ä»¯£¬¿ÉÒÔÔÚThemesÕâ¸öÎļþ¼ÐϼÓÈë¶ÔÓ¦µÄResourceDictionary£¬±ÈÈçÉÏÃæµÄAero.NormalColor.xaml£¬²¢ÇÒÖ¸¶¨³ÌÐò¼¯ThemeInfoµÄµÚÒ»¸ö²ÎÊýΪSourceAssembly£¬±íÃ÷¸Ã³ÌÐò¼¯Ö§³ÖϵͳTheme±ä»¯²¢ÇÒ¶ÔÓ¦µÄ×ÊÔ´ÎļþÔڸóÌÐò¼¯ÖС£µ±È»£¬ResourceDictionaryÒ»¶¨Òª·ÅÔÚThemesÎļþ¼ÐÏ£¬ÒòΪWPF²éÕÒResourceDictionaryʱʹÓõÄÊÇÀàËÆ£º

string relativePackUriForResources = "/" +
2: themeAssemblyName.FullName +
3: ";component/themes/" +
4: themeName + "." +
5: colorScheme + ".xaml";

ÕâÑùµÄ·½·¨¡£

Style & ResourceDictionary

Ç°ÃæÌáµ½Á˺ܶà´ÎResourceDictionary£¬¹ØÓÚWPFµÄResourceϵͳ£¬ÒÔºóÔÙÀ´Ï¸Ì¸¡£WPFµÄResourceϵͳʹÓÃResourceDictionaryÀ´´¢´æResource£¬ResourceDictionary£¬¹ËÃû˼Ò壬ҲÊÇÒ»¸öDictionary£¬¼ÈÈ»ÊÇDictionary£¬¾ÍÊǰ´¼ü/Öµ¶ÔÀ´´æ´¢µÄ¡£ÎÒÃÇ×îÇ°ÃæÔÚWindowµÄResourceÖд´½¨Styleʱ£¬Ö¸¶¨ÁËStyle¶ÔÓ¦µÄ¼üÖµ£¨x:Key£©£¬ºóÃæÓÖÓÃStaticResourceÀ´ÒýÓÃÕâ¸ö¼üÖµ¡£

Èç¹ûÔÚResourceDictionaryÖÐÌí¼ÓÒ»¸ö¶ÔÏóButton£¬²»Ö¸¶¨ËüµÄ¼üÖµ£¨x:Key£©£¬ÊDz»ÄÜͨ¹ý±àÒëµÄ¡£ÎÒÃÇÇ°Ãæ½éÉܵÄÒþʽ£¨Implicit£©Style£¬Ö»Ö¸¶¨ÁËÒ»¸öTargetType={x:Type ÀàÐÍ}£¬²¢Ã»ÓÐÖ¸¶¨¼üÖµ£¬ÎªÊ²Ã´Ëü¿ÉÒÔͨ¹ý±àÒëÄØ£¿

¶ÔÓÚÔÚResourceDictionaryÖÐÌí¼ÓStyle£¬Èç¹ûÎÒÃÇûÓÐÖ¸¶¨¼üÖµ£¨x:Key£©£¬WPF»áĬÈϰïÎÒÃÇÉú³É¼üÖµ£¬Õâ¸ö¼üÖµ²»ÊÇÒ»¸öString£¬¶øÊÇÒ»¸öÀàÐÍobject£¨¾ßÌåÀ´ËµÊÇTypeʵÀý£©£¬Ò²¾ÍÊÇ˵Ï൱ÓÚ£º

<Style TargetType="{x:Type Button}" x:Key="{x:Type Button}">

ºóÃæµÄx:Key¿ÉÒÔÊ¡ÂÔµô¡£

AppliationÒÔ¼°FrameworkElementÀà¶¼¶¨ÒåÁËResourcesÊôÐÔ£¬ÄÚ²¿¶¼³ÖÓÐÒ»¸öResourceDictionary£¬Resource²éÕÒ×ñÑ­µÄ×î»ù±¾Ô­ÔòÊǾͽüÔ­Ôò£¬È磺

<Window>
2: <Window.Resources>
3: <Style TargetType="{x:Type Button}">
4: <Setter Property="Background" Value="Yellow"/>
5: </Style>
6: <Style TargetType="{x:Type ToggleButton}" x:Key="toggleBtnStyle">
7: <Setter Property="Background" Value="Red"/>
8: </Style>
9: </Window.Resources>
10: <StackPanel>
11: <StackPanel.Resources>
12: <Style TargetType="{x:Type Button}">
13: <Setter Property="Background" Value="Blue"/>
14: </Style>
15: <Style TargetType="{x:Type ToggleButton}" x:Key="toggleBtnStyle">
16: <Setter Property="Background" Value="Green"/>
17: </Style>
18: </StackPanel.Resources>
19: <ToggleButton Width="80" Height="20" Style="{DynamicResource toggleBtnStyle}"/>
20: <Button Width="80" Height="20" Content="button2" Click="Button_Click"/>
21: </StackPanel>
22: </Window>

WindowºÍStackPanelµÄResourcesÖж¼·Ö±ð¶¨ÒåÁËtoggleBtnStyleÒÔ¼°ÒþʽStyle£¨Button£©£¬¸ù¾Ý¾Í½üÔ­Ôò£¬StackPanelÄÚ²¿µÄToggleButtonºÍButton»áÓ¦ÓÃStackPanelµÄResource¶ø²»»áʹÓÃWindowµÄ¡£

Style Merge

ÕâÀïÒªÌáµ½±¾ÆªµÄÖØµãÒ²ÊDz»±»ÈË×¢ÒâÈ´¾­³£³ö´íµÄµØ·½£¬StyleµÄºÏ²¢£¨Merge£©¡£

Ç°ÃæÌáµ½Á˺ܶàStyle£¬ThemeStyle£¬Style£¬ÒþʽStyle¡£ÎÒÃÇÌá¹ý£¬StyleÏ൱ÓÚÒ»¸öÊôÐÔÖµµÄÅú´¦Àí£¬ÄÇô¶ÔÓÚÒ»¸öÊôÐÔ£¬Ö»ÄÜÓÐÒ»¸öÔ¤ÉèÖµ¶ø²»Äܶà¸ö£¬ÕâЩStyleÔÚÔËÐÐʱҪ½øÐкϲ¢£¬È»ºó×÷ÓÃÔÚFrameworkElementÉÏ¡£

StyleµÄºÏ²¢£¬Òª·ÖÁ½²½½øÐУº

1.ÕÒµ½ËùÓÐStyle¡£

2.È·¶¨StyleµÄÓÅÏȼ¶£¬¸ù¾ÝÓÅÏȼ¶À´ºÏ²¢Style¡£

ÒÔButtonÀ´Ëµ£º

1.Èç¹ûµ±Ç°WindowsµÄThemeÊÇAero£¬Æô¶¯ºó»á´ÓPresentationFramework.Aero.dllÖÐÕÒµ½¶ÔÓ¦µÄThemeStyle¡£

2.Èç¹ûÔÚButtonÉÏʹÓÃStaticResource»òÕßDynamicResourceÖ¸¶¨ÁËStyle£¬»áͨ¹ý¼üÖµÔÚResourceϵͳÖÐÕÒµ½¶ÔÓ¦µÄStyle¡£

3.Èç¹ûûÓÐÔÚButtonÉÏÏÔʽָ¶¨Style£¬»áͨ¹ýResourceϵͳ²éÕÒÒþʽStyle£¨x:Type Button£©¡£

4.µÚ¶þ²½ºÍµÚÈý²½ÊÇÅÅËûµÄ£¬ÕâÁ½²½Ö»ÄÜÈ·¶¨Ò»¸öStyle£¬È»ºó°ÑÕâ¸öStyleºÍThemeStyle½øÐкϲ¢£¨Merge£©µÃµ½Button×îÖÕµÄЧ¹û¡£

ÏȴӺϲ¢À´Ëµ£¬ÏÔʽ»òÕßÒþʽStyleµÄÓÅÏȼ¶ÊǸßÓÚThemeStyleµÄ£¬Èç¹ûStyleºÍThemeStyleµÄSetterÖж¼¶ÔͬһÊôÐÔ½øÐÐÁËÔ¤É裬ÄÇô»áÈ¡StyleÀïÃæµÄSetter¶øºöÂÔThemeStyle¡£ÕâÀï±È½ÏÌØÊâµÄÊÇEventSetter£¬EventSetterʹÓõÄÊÇRoutedEvent£¬Èç¹ûÁ½¸öStyleµÄEventSetter¶Ôͬһ¸öRoutedEvent½øÐÐÁËÉèÖã¬Á½¸ö¶¼»á×¢²áµ½RoutedEventÉÏ¡£

Ç°Ãæ¿´µ½£¬ÏÔʽºÍÒþʽStyleÊÇÅÅËûµÄ£¬Á½ÕßÖ»ÄÜȡһ£¬ÔÚʵ¼ÊÏîÄ¿ÖУ¬ÔÚÈ«¾Ö¶¨ÒåºÃButtonµÄ»ù±¾Ñùʽ£¬È»ºó¾ßÌåʹÓÃÉÏÔÙ¸ù¾Ý»ù±¾Ñùʽ×öÒ»Ð©ÌØÊâ´¦Àí£¬ÕâÖÖÐèÇóÊǺܳ£¼ûµÄ¡£ÎªÁ˽â¾öÕâÖÖÐèÇó£¬StyleÌá³öÁËBasedOnÊôÐÔ£¬À´±íʾ¼Ì³Ð¹ØÏµ£¬È磺

<Window>
2: <Window.Resources>
3: <Style TargetType="{x:Type Button}">
4: <Setter Property="Width" Value="80"/>
5: <Setter Property="Height" Value="20"/>
6: <EventSetter Event="Click" Handler="btnBase_Click"/>
7: </Style>
8: <Style TargetType="{x:Type ButtonBase}" x:Key="toggleBtnStyle">
9: <Setter Property="Width" Value="80"/>
10: <Setter Property="Height" Value="20"/>
11: <Setter Property="Background" Value="Red"/>
12: </Style>
13: </Window.Resources>
14: <StackPanel>
15: <StackPanel.Resources>
16: <Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}">
17: <Setter Property="Background" Value="Blue"/>
18: <EventSetter Event="Click" Handler="btn_Click"/>
19: </Style>
20: <Style TargetType="{x:Type ToggleButton}" x:Key="toggleBtnStyle" BasedOn="{StaticResource toggleBtnStyle}">
21: <Setter Property="Background" Value="Green"/>
22: </Style>
23: </StackPanel.Resources>
24: <ToggleButton Style="{DynamicResource toggleBtnStyle}"/>
25: <Button Content="button2"/>
26: </StackPanel>
27: </Window>

ΪÁ˸üÇåÎúµÄ½âÊÍ£¬¸ø³öÁËÒ»¸ö²»Ì«³£¼ûµÄÀý×Ó¡£µÚ16Ðд´½¨ÁËÒ»¸öÒþʽStyle£¨Button£©£¬ËüµÄBasedOnÊôÐÔÈÔÈ»ÊÇÒþʽStyle£¨Button£©£¬Resourceϵͳ»áÏòÉϲéÕÒÕÒµ½WindowµÄResorcesÖеÄÒþʽStyle£¨Button£©£¬È»ºó°ÑÁ½Õߺϲ¢¡£¶ÔÓÚͬһ¸öResourceDictionary£¬ÊDz»ÔÊÐíÓÐÖØ¸´¼üÖµµÄ£¬StackPanelºÍWindow¸÷Óи÷×ÔµÄResourceDictionary£¬ËûÃǵļüÖµ²»ÊܸÉÈÅ£¬²éÕÒʱ»áͨ¹ý¾Í½üÔ­ÔòÀ´ÕÒµ½ÓÅÏȼ¶×î¸ßµÄResource¡£µÚ20ÐÐToggleButtonµÄÀý×ÓºÍButtonÊÇÒ»ÑùµÄ£¬Ö»ÊÇËü²éÕÒµ½µÄµÚ8ÐÐtoggleBtnStyleµÄTargetStyleÊÇButtonBase£¬ButtonBaseÊÇToggleButtonµÄ»ùÀ࣬BasedOnÊôÐÔÒ²¿ÉÒÔ×÷Óá£

WPFµÄStyle»úÖÆÊÇÒ»¸öÃܷ⣨Seal£©»úÖÆ£¬ËüµÄÊéд·½Ê½ºÜÁé»î£¬¿ÉÒÔÖ§³ÖºÏ²¢µÈ£¬µ±×îºóºÏ²¢ºó£¬Style¾Í±»Ãܷ⣨Seal£©£¬ÄÚ²¿µÄSetterµÈ²»ÔÊÐíÔÙ±»Ð޸ġ£ÕâÖÖÃÜ·âµÄÉè¼ÆÓÐËüµÄµÀÀí£¬µ«ÔÚStyleµÄ¶¯Ì¬ÐÔÉϾÍÉÔÏÔ²»×ã¡£

ÒÔ×Ô¶¨Òå¿Ø¼þΪÀý£¬×Ô¶¨ÒåÒ»¸öButton£¬Ãû×Ö½ÐMyButton£¬Ëü¼Ì³Ð×ÔButton£¬ÔÚ×Ô¶¨Òå¿Ø¼þÖУ¬¾­³£¿ÉÒÔ¿´µ½ÕâÑùµÄ´úÂ룺

static MyButton()
2: {
3: DefaultStyleKeyProperty.OverrideMetadata(typeof(MyButton), new FrameworkPropertyMetadata(typeof(MyButton)));
4: }

ÕâÀï³öÏÖÁËDefaultStyle£¬Õâ¸öÊÇWPF¶ÔThemeStyleµÄÁíÒ»¸ö˵·¨£¬ThemeStyle¾ÍÊÇÓÃÀ´È·¶¨Ä¬ÈϵÄStyleµÄ£¬ºóÀ´°üÀ¨BaseValueSourceÖÐҲʹÓÃÁËDefaultStyleÀ´±íʾThemeStyle¡£ÔÚMyButtonµÄ¾²Ì¬º¯ÊýÖÐÖØÔØDefaultStyleKeyPropertyÄÚ²¿MetadataµÄº¬ÒåÊǸæËßWPFϵͳ£¬²éÕÒMyButtonµÄThemeStyleʹÓõļüÖµ´Ó{x:Type Button}±»¸Ä³ÉÁË{x:Type MyButton}¡£

Èç¹ûÏñÉÏÊö´úÂëÒ»ÑùÐÞ¸ÄÁËDefaultStyleKeyProperty£¬ÄÇôÐèÒªÎÒÃÇÔÚThemes/Generic.xamlÖж¨ÒåºÃMyButtonµÄĬÈÏ£¨Theme£©Style£¬·ñÔòMyButtonÊÇûÓÐÍâ¹ÛµÄ£¬ÒòΪ²éÕÒThemeStyleµÄ¼üÖµÒѾ­±»Ð޸ģ¬PresentationFramework.Aero.dllµÈdllÖÐÊÇûÓж¨Òå{x:Type MyButton}µÄ¡£

Ç°ÃæÊǹØÓÚThemeStyleµÄÓ÷¨£¬ÄÇô»Øµ½ÒþʽStyleÉÏÀ´£¬Èç¹ûÎÒÃÇÔÚApplicationµÄResourcesÖж¨ÒåÁËButtonµÄÒþʽStyle£¨TargetType={x:Type Button}£©£¬¼´Ê¹Ã»ÓÐÏÔʽÉèÖÃMyButtonµÄStyle£¬ËùÓеÄMyButton¿Ø¼þÒ²²»»áʹÓÃÕâ¸öÒþʽStyleµÄ¡£ÐèÒªÄãÔÚApplicationµÄResourcesÖУ¬ÔÚ¶¨ÒåButtonÒþʽStyleµÄÏÂÃæ¶¨Òå

<Style TargetType="{x:Type local:MyButton}" BasedOn="{StaticResource {x:Type Button}}"/>

ÕâÀï¾Í»Øµ½StyleµÄºÏ²¢£¨Merge£©ÉÏÀ´ÁË£¬StyleµÄMergeÊǺܻù±¾£¨ºÜɵ£©µÄºÏ²¢£¨Merge£©£¬Ëü²»¾ß±¸AutoÐÔ¡£¾ßÌåÀ´Ëµ£¬¾ÍÊÇ£º

1.»ùÀà¿Ø¼þµÄÒþʽStyle²»»á×÷Óõ½ÅÉÉúÀà¿Ø¼þÉÏ¡£

2.ÏñÇ°ÃæÔÚWindowºÍStackPanelÖзֱð¶¨ÒåÁËÒþʽStyle£¨Button£©£¬ÕâÁ½¸öÒþʽStyle²»»áÖÇÄܺϲ¢ºóÔÙ×÷Óõ½ButtonÉÏ£¬¶øÊÇͨ¹ý¾Í½üÔ­ÔòֻѡÆäÒ»¡£

3.StyleµÄBasedOnÊôÐÔÖ»Ö§³ÖStaticResource·½Ê½ÒýÓã¬ÒòΪStyle¼Ì³Ð×ÔDispatcherObject¶ø²»ÊÇDependencyObject£¬DynamicResourceÖ»Ö§³ÖDP¡£

ÕâЩÎÊÌâ¶¼ÐèҪͨ¹ýStyleµÄBasedOnÀ´½â¾ö£¬ÒòΪBasedOnÓõÄÊǾ²Ì¬ÒýÓã¨StaticResource£©£¬µ±ÒþʽStyle·¢Éú±ä»¯Ê±¾ÍÓÐÂé·³ÁË¡£

»»·ô

UI³ÌÐòµÄ»»·ôÊǺÜìŵÄÍæÒ⣬»»·ô·ÖÁ½ÖÖ£º1£¬¸ü»»Õû¸ö¿Ø¼þµÄStyle£»2£¬¸ü»»StyleÖеÄÑÕÉ«»­Ë¢£¨Brush£©¡£ºóÕßµÄʵÏֺܼòµ¥£¬¶¨ÒåºÃÑÕÉ«»­Ë¢µÄ×ÊÔ´Îļþ£¨ResourceDictionary£©£¬Ê¹Óû­Ë¢µÄʱºòʹÓÃDynamicResource°ó¶¨£¬»»·ôµÄʱºòÌæ»»»­Ë¢µÄ×ÊÔ´Îļþ¾Í¿ÉÒÔÁË¡£

ºÜ¶à¹«Ë¾¶¼ÓÐ×Ô¼ºÆ¤·ô¿â£¬ÕâЩƤ·ô¿âÒ»°ã¶¼ÊÇÒþʽµÄStyle£¬¶¨ÒåÁËËùÓпؼþµÄÒþʽStyle£¬Ê¹ÓÃʱ°ÑÕâ¸öƤ·ô×ÊÔ´Mergeµ½ApplicationµÄResourcesÖС£»»·ôʱ°Ñ¾ÉµÄƤ·ô×ÊÔ´´ÓApplicationµÄResourcesÖÐɾ³ý£¬Ìæ»»³ÉÐÂµÄÆ¤·ô×ÊÔ´ResourceDictionary¡£

ÕâÖÖ×ö·¨ºÜºÃÀí½â£¬µ«ÊÇÅöµ½StyleµÄBasedOnÊôÐԾͲ»Æð×÷ÓÃÁË£¬BasedOnÊôÐÔʹÓÃÊÇStaticResource£¬ÊǾ²Ì¬µÄÒ»´ÎÐԵġ£ÐÂµÄÆ¤·ô¿â±»Ìí¼Óµ½Application×ÊÔ´Îļþºó£¬Èç¹ûÔÚApplicationµÄ×ÊÔ´ÎļþÖÐÒѾ­¶¨Òå¹ý<Style TargetType=¡°{x:Type Button}¡± BasedOn=¡°{StaticResource {x:Type Button}}¡±/>ÕâÑùÒþʽµÄStyle£¬¿Ø¼þÊDz»»á¸üÐÂÆ¤·ôµÄ¡£Èç¹ûÓÐÕâ·½ÃæµÄÐèÇó£¬ÐèÒªÊÖ¶¯ºÏ²¢£¨Merge£©StyleÀ´½â¾öÎÊÌ⣬ÀàËÆ£º

public static void Merge(this Style style, Style otherStyle)
2: {
3: foreach (SetterBase currentSetter in otherStyle.Setters)
4: {
5: style.Setters.Add(currentSetter);
6: }
7:
8: foreach (TriggerBase currentTrigger in otherStyle.Triggers)
9: {
10: style.Triggers.Add(currentTrigger);
11: }
12:
13: foreach (object key in otherStyle.Resources.Keys)
14: {
15: style.Resources[key] = otherStyle.Resources[key];
16:

ÕâÀﻹÐèÒª¼ÓÉÏһЩÌõ¼þÅжϣ¬ÒÔ¼°¾ö¶¨ÊÇ·ñÒªµÝ¹éºÏ²¢otherStyleµÄBasedOn£¬»Øµ½Ç°Ã棬³ÌÐòÐèҪʹÓÃDynamicResourceÀ´¼àÌýApplication×ÊÔ´ÖÐÒþʽStyleµÄ±ä»¯£¬ÓÃÒ»¸ö¸½¼ÓÊôÐÔÀ´½â¾ö£º

public static readonly DependencyProperty AutoMergeStyleProperty =
2: DependencyProperty.RegisterAttached("AutoMergeStyle", typeof(Type), typeof(Behavior),
3: new FrameworkPropertyMetadata((Type)null,
4: new PropertyChangedCallback(OnAutoMergeStyleChanged)));
5:
6: private static void OnAutoMergeStyleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
7: {
8: if (e.OldValue == e.NewValue)
9: {
10: return;
11: }
12:
13: FrameworkElement control = d as FrameworkElement;
14: if (control == null)
15: {
16: throw new NotSupportedException("AutoMergeStyle can only used in FrameworkElement");
17: }
18:
19: Type type = e.NewValue as Type;
20: if (type != null)
21: {
22: control.SetResourceReference(Behavior.BaseOnStyleProperty, type);
23: }
24: else
25: {
26: control.ClearValue(Behavior.BaseOnStyleProperty);
27: }
28: }

SetResourceReferenceÊÇXAMLÖÐDynamicResourceµÄ´úÂë±íʾ£¬Ï൱ÓÚBehavior.BaseOnStyle={DynamicResource type}¡£¶Ô¿Ø¼þʹÓÃSetResourceReference£¬¼àÌýµÄ¼üÖµÊÇtype£¬¼àÌýµÄÊôÐÔÊÇÒ»¸öÎÒÃÇ×Ô¶¨ÒåµÄ¸½¼ÓÊôÐÔBaseOnStyleProperty¡£µ±»»·ôÌæ»»ApplicationµÄ×ÊÔ´Îļþʱ£¬BaseOnStyleÊôÐÔ±»¸üУ¬ÔÚBaseOnStylePropertyµÄChangedʼþÖпÉÒÔ¶ÁÈ¡¿Ø¼þµÄStyleÊôÐÔºÍеÄThemeStyle£¬µ÷ÓÃMerge·½·¨MergeÁ½ÕßÈ»ºóÔÙÉèÖõ½¿Ø¼þµÄStyleÊôÐÔÉÏ¡£

×ܽá

WPFÖÐStyleµÄÉè¼ÆÖйæÖоأ¬°ÑUI¶ÔÏóÑùʽºÍ½á¹¹·ÖÀëÊÇËüµÄ×î³õÏë·¨£¬ÆäÖÐÒ²¼ÓÈëÁËTriggerµÈһЩºÃµÄÉè¼Æ£¬µ«ÔÚʹÓÃÖл¹ÊÇ»á³öÏÖһЩÎÊÌ⣬Ëü±¾ÉíÒ²²»ÊÇÄÇôÖÇÄÜÍêÃÀ¡£Ï£ÍûÅóÓÑÃǶ¼ÄÜ´ÓÄÚµ½ÍâµÄ¿´´ýStyle£¬¸üºÃµÄÍæ×ªËü¡£

   
3923 ´Îä¯ÀÀ       29
 
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
 
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
 
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ 12-11[±±¾©]
LLM´óÄ£ÐÍÓëÖÇÄÜÌ忪·¢ÊµÕ½ 12-18[±±¾©]
ǶÈëʽÈí¼þ²âÊÔ 12-25[±±¾©]
AIÔ­ÉúÓ¦ÓõÄ΢·þÎñ¼Ü¹¹ 1-9[±±¾©]
AI´óÄ£Ðͱàд¸ßÖÊÁ¿´úÂë 1-14[±±¾©]
ÐèÇó·ÖÎöÓë¹ÜÀí 1-22[±±¾©]

ʹÓÃdecj¼ò»¯Webǰ¶Ë¿ª·¢
Web¿ª·¢¿ò¼ÜÐγÉÖ®ÂÃ
¸üÓÐЧÂʵÄʹÓÃVisual Studio
MVP+WCF+Èý²ã½á¹¹´î½¨¿ò¼Ü
ASP.NETÔËÐлúÖÆÇ³Îö¡¾Í¼½â¡¿
±àд¸üºÃµÄC#´úÂë
10¸öVisual Studio¿ª·¢µ÷ÊÔ¼¼ÇÉ

.NET¿ò¼ÜÓë·Ö²¼Ê½Ó¦Óüܹ¹Éè¼Æ
.NET & WPF & WCFÓ¦Óÿª·¢
UML&.Net¼Ü¹¹Éè¼Æ
COM×é¼þ¿ª·¢
.NetÓ¦Óÿª·¢
InstallShield

ÈÕÕÕ¸Û .NET Framework & WCFÓ¦Óÿª·¢
Éñ»ªÐÅÏ¢ .NETµ¥Ôª²âÊÔ
±±¾© .NetÓ¦ÓÃÈí¼þϵͳ¼Ü¹¹
̨´ïµç×Ó .NET³ÌÐòÉè¼ÆÓ뿪·¢
ÈüÃÅÌú¿Ë C#Óë.NET¼Ü¹¹Éè¼Æ
¹ã¶«ºËµç .NetÓ¦ÓÃϵͳ¼Ü¹¹