WPF: Hoe om styl of skakel die verstek Context van 'n teksboks
Vra
Blijkbaar wanneer gebruikers regs-kliek in ons WPF aansoek, en hulle gebruik die Windows Classic tema, die verstek Context van die teksboks (wat Kopieer, Sny en plak bevat) het 'n swart agtergrond.
Ek weet dit werk goed:
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<TextBox ContextMenu="{x:Null}"/>
</Page>
Maar dit werk nie:
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<Style x:Key="{x:Type TextBox}" TargetType="{x:Type TextBox}">
<Setter Property="ContextMenu" Value="{x:Null}"/>
</Style>
</Page.Resources>
<TextBox/>
</Page>
Is daar iemand weet hoe om styl of skakel die verstek Context vir al TextBoxes in WPF?
Oplossing 3
As gevolg van 'n laat foutverslag ons ontdek dat ons nie kan gebruik maak van die ApplicationComands Sny plak en kopieer direk in 'n gedeeltelike betroubare aansoek. Daarvoor, met behulp van hierdie opdragte in enige Commmand van jou kontrole sal absoluut niks doen wanneer dit uitgevoer word.
So in wese Brads antwoord amper daar was, is dit seker lyk die regte manier maw geen swart agtergrond, maar het die probleem nie op te los.
Ons het besluit om die spyskaart "verwyder" wat gebaseer is op Brads antwoord, soos so:
<ContextMenu x:Key="TextBoxContextMenu" Width="0" Height="0" />
En gebruik hierdie konteks kieslys leë soos so:
<Style TargetType="{x:Type TextBox}">
<Setter Property="ContextMenu" Value="{StaticResource TextBoxContextMenu}" />
</Style>
Ander wenke
Om styl Context se vir al TextBoxes, sou ek iets soos die volgende te doen:
In die eerste plek in die afdeling hulpbronne, voeg 'n Context wat jy van plan is om te gebruik as jou standaard Context in 'n teksboks.
Bv.
<ContextMenu x:Key="TextBoxContextMenu" Background="White">
<MenuItem Command="ApplicationCommands.Copy" />
<MenuItem Command="ApplicationCommands.Cut" />
<MenuItem Command="ApplicationCommands.Paste" />
</ContextMenu>
In die tweede plek, skep 'n styl vir jou TextBoxes, wat die konteks kieslys hulpbron gebruik:
<Style TargetType="{x:Type TextBox}">
<Setter Property="ContextMenu" Value="{StaticResource TextBoxContextMenu}" />
</Style>
Ten slotte, gebruik jou teks boks as normale:
<TextBox />
As plaas jy hierdie konteks kieslys van toepassing op slegs 'n paar van jou teksbokse, nie bo skep die styl, en voeg die volgende by jou teksboks opmaak:
<TextBox ContextMenu="{StaticResource TextBoxContextMenu}" />
Hoop dit help!
Bizarre. ContextMenu="{x:Null}"
nie die truuk doen.
Dit beteken egter:
<TextBox.ContextMenu>
<ContextMenu Visibility="Collapsed">
</ContextMenu>
</TextBox.ContextMenu>
verwyder die x: Sleutel kenmerk van die styl hulpbron, verlaat TargetType. Ek weet, jy is veronderstel om daardie x het: Sleutel vir 'n hulpbron, maar as jy dit het saam met jou TargetType die Sleutel die deurslag gee.
Hier is 'n voorbeeld styl wat ek gebruik in 'n projek om al tooltips in een van my apps (dit is in App.Resources - kennisgewing, geen Sleutel) vel
<Style
TargetType="{x:Type ToolTip}">
<Setter
Property="Template">
<Setter.Value>
<ControlTemplate
TargetType="{x:Type ToolTip}">
<Grid
Width="{TemplateBinding Width}"
Height="{TemplateBinding Height}">
<Rectangle
RadiusX="9"
RadiusY="9"
Stroke="LightGray"
StrokeThickness="2">
<Rectangle.Fill>
<RadialGradientBrush>
<GradientStop />
<GradientStop
Color="FloralWhite"
Offset="0" />
<GradientStop
Color="Cornsilk"
Offset="2" />
</RadialGradientBrush>
</Rectangle.Fill>
</Rectangle>
<ContentPresenter
Margin="6 4 6 4" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Maak nie saak nie, as jy nie 'n sleutel verskaf, sal dit die TargetType
gebruik as sleutel net dieselfde manier my voorbeeld gebruik:)
Geneem uit MSDN op Styl:
die
TargetType
eiendom aan dieTextBlock
tipe opstel sonder die opstel van 'nx:Key
implisiet stel diex:Key
om{x:Type TextBlock}
. Dit beteken ook dat as jy>> gee die bogenoemde Style 'nx:Key
waarde van enigiets anders as{x:Type TextBlock}
, die Style sou nie outomaties toegepas word op alle TextBlock elemente. In plaas daarvan, wat jy nodig het om die styl van toepassing op dieTextBlock
elemente eksplisiet.
http://msdn.microsoft.com /en-us/library/system.windows.style.targettype.aspx
Dit is manier is wat ek altyd gebruik:
<TextBox x:Name="MyTextbox">
<TextBox.ContextMenu>
<ContextMenu Visibility="Hidden"/>
</TextBox.ContextMenu>
</TextBox>
En ook kan gebruik:
MyTextbox.ContextMenu.Visibility = Visibility.Hidden;
MyTextbox.ContextMenu.Visibility = Visibility.Visble;