WPF ControlTemplate Trigger -


all, trying set template window. want change margin , border thickness depending upon state of window. trying using trigger, when run application, triggers don't fire. question is, how can make triggers fire when window state changed?

the xaml have (i have removed of code keep posting simple):

<window x:class="wpfapplication1.mainwindow"         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"         xmlns:local="clr-namespace:wpfapplication1" background="#ffe8e8e8"         style="{dynamicresource chromewindowstyle}"         mc:ignorable="d"          title="basewindow" width="500" height="300">      <windowchrome.windowchrome>         <windowchrome resizeborderthickness="6" captionheight="0" glassframethickness="0" />     </windowchrome.windowchrome>      <window.resources>         <style x:key="chromewindowstyle" targettype="{x:type window}">             <setter property="foreground" value="black"/>             <setter property="background" value="#ffe8e8e8"/>             <setter property="windowstyle" value="none" />             <setter property="template">                 <setter.value>                     <controltemplate targettype="{x:type window}">                         <border x:name="mainborder" background="white" borderbrush="gray" borderthickness="1">                             <dockpanel lastchildfill="true">                                 <border height="30" dockpanel.dock="top">                                     <dockpanel lastchildfill="false">                                         <textblock text="heading" dockpanel.dock="left" verticalalignment="center" />                                         <button x:name="closebutton" content="close" dockpanel.dock="right" />                                         <button x:name="maximizebutton" content="max" dockpanel.dock="right" />                                         <button x:name="minbutton" content="min" dockpanel.dock="right"/>                                     </dockpanel>                                 </border>                                 <adornerdecorator dockpanel.dock="bottom">                                     <contentpresenter contenttemplate="{templatebinding contenttemplate}"                                                   content="{templatebinding content}"                                                   contentstringformat="{templatebinding contentstringformat}"/>                                 </adornerdecorator>                             </dockpanel>                         </border>                            <!--this piece wont trigger - start -->                         <controltemplate.triggers>                             <trigger property="windowstate" value="normal">                                 <setter property="margin" value="8" />                                 <setter property="borderthickness" value="1" />                             </trigger>                             <trigger property="windowstate" value="maximized">                                 <setter property="margin" value="8" />                                 <setter property="borderthickness" value="0" />                             </trigger>                         </controltemplate.triggers>                         <!--this piece wont trigger - end -->                        </controltemplate>                 </setter.value>             </setter>         </style>     </window.resources>      <grid>      </grid> </window> 

your controltemplate.triggers trying set properties on controltemplate itself, in-and-of not visual element. need explicitly specify name of border control:

<controltemplate.triggers>     <trigger property="windowstate" value="normal">         <setter targetname="mainborder" property="margin" value="8" />         <setter targetname="mainborder" property="borderthickness" value="1" />     </trigger>     <trigger property="windowstate" value="maximized">         <setter targetname="mainborder" property="margin" value="8" />         <setter targetname="mainborder" property="borderthickness" value="0" />     </trigger> </controltemplate.triggers> 

edit: oh ok, i'm still on 4.5.1, maybe that's new behavior? in case i'd go other way i.e. put datatriggers on border control itself:

    <style x:key="chromewindowstyle" targettype="{x:type window}">         <setter property="foreground" value="black"/>         <setter property="windowstyle" value="none" />         <setter property="template">             <setter.value>                 <controltemplate targettype="{x:type window}">                     <border borderbrush="gray">                         <border.style>                             <style targettype="{x:type border}">                                 <setter property="margin" value="8" />                                 <setter property="borderthickness" value="1" />                                 <style.triggers>                                     <datatrigger binding="{binding relativesource={relativesource ancestortype=window}, path=windowstate}" value="maximized">                                         <setter property="margin" value="8" />                                         <setter property="borderthickness" value="0" />                                     </datatrigger>                                 </style.triggers>                             </style>                         </border.style>                          <dockpanel lastchildfill="true">                             <border height="30" dockpanel.dock="top">                                 <dockpanel lastchildfill="false">                                     <textblock text="heading" dockpanel.dock="left" verticalalignment="center" />                                     <button x:name="closebutton" content="close" dockpanel.dock="right" />                                     <button x:name="maximizebutton" content="max" dockpanel.dock="right" click="maximizebutton_click"/>                                     <button x:name="minbutton" content="min" dockpanel.dock="right"/>                                 </dockpanel>                             </border>                             <adornerdecorator dockpanel.dock="bottom">                                 <contentpresenter contenttemplate="{templatebinding contenttemplate}"                                               content="{templatebinding content}"                                               contentstringformat="{templatebinding contentstringformat}"/>                             </adornerdecorator>                         </dockpanel>                     </border>                  </controltemplate>             </setter.value>         </setter>     </style> 

Comments

Popular posts from this blog

dns - How To Use Custom Nameserver On Free Cloudflare? -

python - Pygame screen.blit not working -

c# - Web API response xml language -