c# - WPF ToggleButton display state when disabled -


i have toggle buttons on wpf form use display boolean value.

some of button supposed "read only", setted them isenabled = false.

however, should display ischecked state nonetheless apear unchecked

screenshot

as can see, disabled seem unchecked, should checked.

i'm creating toggle buttons code problem there "static" toggle buttons

togglebutton tb = new togglebutton();  tb.name = "btnregisterr" + register + "p" + pos; tb.content = tuple.item1"; tb.ischecked = rnd.nextdouble() >= 0.5; tb.isenabled = tuple.item2; tb.verticalalignment = verticalalignment.top; tb.horizontalalignment = horizontalalignment.left; tb.height = 25; tb.width = 87; tb.margin = new thickness(xpos, ypos, 0, 0);  registergrid.children.add(tb); 

edit : don't think duplicate of linked question, i'm not looking disable interaction on button disabled keep displaying status. linked question answer functional part wheras i'm asking styling part.

for exemple, in winforms, there apperance button checkbox, allow 2 separate display states (by default gray button when unselected/unchecked , light blue 1 when selected/checked).

on top of that, control enabled/disabled, which, in disable state, whitend whole control still display diferrently when enabled or disabled.

edit 2 : futher clarification, here using in old winform app checkboxes appearance setting set "button"

demo

you can visualy separate ones enabled or disabled while still able see state of input (checked or not). i'm trying replicate display behavior in wpf, without succes moment "checked|disabled" , "unchecked|disabled" same wpf toggle button.

edit 3 :

i ended using multitrigger in style make work. don't know if it's best solution, but, @ least, give same results in winform

end

<style x:key="focusvisual">     <setter property="control.template">         <setter.value>             <controltemplate>                 <rectangle margin="2" snapstodevicepixels="true" stroke="{dynamicresource {x:static systemcolors.controltextbrushkey}}" strokethickness="1" strokedasharray="1 2"/>             </controltemplate>         </setter.value>     </setter> </style> <solidcolorbrush x:key="button.static.background" color="#ffdddddd"/> <solidcolorbrush x:key="button.static.border" color="#ff707070"/> <solidcolorbrush x:key="button.mouseover.background" color="#ffbee6fd"/> <solidcolorbrush x:key="button.mouseover.border" color="#ff3c7fb1"/> <solidcolorbrush x:key="button.pressed.background" color="#ffc4e5f6"/> <solidcolorbrush x:key="button.pressed.border" color="#ff2c628b"/> <solidcolorbrush x:key="button.disabled.background" color="#fff4f4f4"/> <solidcolorbrush x:key="button.disabled.border" color="#ffadb2b5"/> <solidcolorbrush x:key="button.disabled.foreground" color="#ff838383"/> <style x:key="disabledandcheckedbutton" targettype="{x:type togglebutton}">     <setter property="focusvisualstyle" value="{staticresource focusvisual}"/>     <setter property="background" value="{staticresource button.static.background}"/>     <setter property="borderbrush" value="{staticresource button.static.border}"/>     <setter property="foreground" value="{dynamicresource {x:static systemcolors.controltextbrushkey}}"/>     <setter property="borderthickness" value="1"/>     <setter property="horizontalcontentalignment" value="center"/>     <setter property="verticalcontentalignment" value="center"/>     <setter property="padding" value="1"/>     <setter property="template">         <setter.value>             <controltemplate targettype="{x:type togglebutton}">                 <border x:name="border" borderbrush="{templatebinding borderbrush}" borderthickness="{templatebinding borderthickness}" background="{templatebinding background}" snapstodevicepixels="true">                     <contentpresenter x:name="contentpresenter" focusable="false" horizontalalignment="{templatebinding horizontalcontentalignment}" margin="{templatebinding padding}" recognizesaccesskey="true" snapstodevicepixels="{templatebinding snapstodevicepixels}" verticalalignment="{templatebinding verticalcontentalignment}"/>                 </border>                 <controltemplate.triggers>                     <trigger property="button.isdefaulted" value="true">                         <setter property="borderbrush" targetname="border" value="{dynamicresource {x:static systemcolors.highlightbrushkey}}"/>                     </trigger>                     <trigger property="ismouseover" value="true">                         <setter property="background" targetname="border" value="{staticresource button.mouseover.background}"/>                         <setter property="borderbrush" targetname="border" value="{staticresource button.mouseover.border}"/>                     </trigger>                     <trigger property="ischecked" value="true">                         <setter property="background" targetname="border" value="{staticresource button.pressed.background}"/>                         <setter property="borderbrush" targetname="border" value="{staticresource button.pressed.border}"/>                     </trigger>                     <multitrigger>                         <multitrigger.conditions>                             <condition property="ischecked" value="false" />                             <condition property="isenabled" value="false" />                         </multitrigger.conditions>                         <multitrigger.setters>                             <setter property="background" targetname="border" value="{staticresource button.disabled.background}"/>                             <setter property="borderbrush" targetname="border" value="{staticresource button.disabled.border}"/>                             <setter property="textelement.foreground" targetname="contentpresenter" value="{staticresource button.disabled.foreground}"/>                         </multitrigger.setters>                     </multitrigger>                     <multitrigger>                         <multitrigger.conditions>                             <condition property="ischecked" value="true" />                             <condition property="isenabled" value="false" />                         </multitrigger.conditions>                         <multitrigger.setters>                             <setter property="textelement.foreground" targetname="contentpresenter" value="{staticresource button.disabled.foreground}"/>                         </multitrigger.setters>                     </multitrigger>                 </controltemplate.triggers>             </controltemplate>         </setter.value>     </setter> </style> 

i tried solve problem , can setting tb.ishittestvisible=false; leave isenabled=true.
allow button retain it's visual state disable interaction it.
treat isreadonly.
edit:
after long think went ahead , used blend create style button:

<style x:key="focusvisual">         <setter property="control.template">             <setter.value>                 <controltemplate>                     <rectangle margin="2" snapstodevicepixels="true" stroke="{dynamicresource {x:static systemcolors.controltextbrushkey}}" strokethickness="1" strokedasharray="1 2"/>                 </controltemplate>             </setter.value>         </setter>     </style>     <solidcolorbrush x:key="button.static.background" color="#ffdddddd"/>     <solidcolorbrush x:key="button.static.border" color="#ff707070"/>     <solidcolorbrush x:key="button.mouseover.background" color="#ffbee6fd"/>     <solidcolorbrush x:key="button.mouseover.border" color="#ff3c7fb1"/>     <solidcolorbrush x:key="button.pressed.background" color="#ffc4e5f6"/>     <solidcolorbrush x:key="button.pressed.border" color="#ff2c628b"/>     <solidcolorbrush x:key="button.disabled.background" color="#fff4f4f4"/>     <solidcolorbrush x:key="button.disabled.border" color="#ffadb2b5"/>     <solidcolorbrush x:key="button.disabled.foreground" color="#ff838383"/>     <style x:key="disabledandcheckedbutton" targettype="{x:type togglebutton}">         <setter property="focusvisualstyle" value="{staticresource focusvisual}"/>         <setter property="background" value="{staticresource button.static.background}"/>         <setter property="borderbrush" value="{staticresource button.static.border}"/>         <setter property="foreground" value="{dynamicresource {x:static systemcolors.controltextbrushkey}}"/>         <setter property="borderthickness" value="1"/>         <setter property="horizontalcontentalignment" value="center"/>         <setter property="verticalcontentalignment" value="center"/>         <setter property="padding" value="1"/>         <setter property="template">             <setter.value>                 <controltemplate targettype="{x:type togglebutton}">                     <border x:name="border" borderbrush="{templatebinding borderbrush}" borderthickness="{templatebinding borderthickness}" background="{templatebinding background}" snapstodevicepixels="true">                         <contentpresenter x:name="contentpresenter" focusable="false" horizontalalignment="{templatebinding horizontalcontentalignment}" margin="{templatebinding padding}" recognizesaccesskey="true" snapstodevicepixels="{templatebinding snapstodevicepixels}" verticalalignment="{templatebinding verticalcontentalignment}"/>                     </border>                     <controltemplate.triggers>                         <trigger property="button.isdefaulted" value="true">                             <setter property="borderbrush" targetname="border" value="{dynamicresource {x:static systemcolors.highlightbrushkey}}"/>                         </trigger>                         <trigger property="ismouseover" value="true">                             <setter property="background" targetname="border" value="{staticresource button.mouseover.background}"/>                             <setter property="borderbrush" targetname="border" value="{staticresource button.mouseover.border}"/>                         </trigger>                         <trigger property="ischecked" value="true">                             <setter property="background" targetname="border" value="{staticresource button.pressed.background}"/>                             <setter property="borderbrush" targetname="border" value="{staticresource button.pressed.border}"/>                         </trigger>                         <trigger property="isenabled" value="false">                             <setter property="background" targetname="border" value="{staticresource button.disabled.background}"/>                             <setter property="borderbrush" targetname="border" value="{staticresource button.disabled.border}"/>                             <setter property="textelement.foreground" targetname="contentpresenter" value="{staticresource button.disabled.foreground}"/>                         </trigger>                     </controltemplate.triggers>                 </controltemplate>             </setter.value>         </setter>     </style>   

this bit of code go app.xaml file can reference anywhere in app.
use piece follows:

<togglebutton content="{binding .}" style="{staticresource disabledandcheckedbutton}"/>   

and if want keep code-behind

(not cool bro)

then use snippet programatically generate buttons:

style style = this.findresource("disabledandcheckedbutton") style; tb.style = style;   

let know if need help.


Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -