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?

Was dit nuttig?

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 die TextBlock tipe opstel sonder   die opstel van 'n x:Key implisiet stel die x:Key om {x:Type TextBlock}. Dit beteken ook dat as jy>> gee die bogenoemde Style 'n x: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 die TextBlock 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;
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top