2009-05-13 11 views
19

Stavo scherzando con margini e imbottiture e ho scoperto che un valore negativo era accettabile e dà un buon effetto in circostanze appropriate. Ad esempio, se hai un bordo con un oggetto pieno e vuoi che il colore dell'oggetto riempito superi il bordo. Qualcuno ne ha altri?WPF semplici consigli e trucchi?

risposta

3

calcolare l'immobiliare a disposizione sotto forma di percentuale:

<Grid.RowDefinitions> 
    <RowDefinition Height="0.25*"/> 
    <RowDefinition Height="0.25*"/> 
    <RowDefinition Height="0.25*"/> 
    <RowDefinition Height="0.25*"/> 
</Grid.RowDefinitions> 

EDIT:

Questo funziona, ma non è indicativo di come le funzioni parametriche *. Questo:

<Grid.RowDefinitions> 
    <RowDefinition Height="*"/> 
    <RowDefinition Height="*"/> 
    <RowDefinition Height="*"/> 
    <RowDefinition Height="*"/> 
</Grid.RowDefinitions> 

fornisce la stessa funzionalità. Se volete qualcosa di diverso righe uguale altezza è possibile utilizzare:

<Grid.RowDefinitions> 
    <RowDefinition Height="1*"/> 
    <RowDefinition Height="2*"/> 
    <RowDefinition Height="3*"/> 
    <RowDefinition Height="4*"/> 
</Grid.RowDefinitions> 

che dividerà l'altezza disponibile per 10 e mantenere l'altezza relativa di ogni riga. In alternativa, i valori potrebbero essere 0,1, 0,2, 0,3, e 0,4 o qualsiasi valore proporzionale.

5

Includono parentesi graffe nel contenuto di un controllo.

<Button Content="{}{This is not a markup extension.}"/> 
7

impostare uno stile di debug che fornisce indicazioni visive:

<Window.Resources> 

    <Style x:Key="DebugGrid" TargetType="Grid"> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
     <Setter Property="ShowGridLines" Value="True"/> 
     </Trigger> 
    </Style.Triggers> 
    </Style> 

</Window.Resources> 

<Grid Name="Grid" 
     Style="{StaticResource DebugGrid}" 
     Background="Black">... 
+2

Ah, tempo di risparmio definito. –

1

Inserire virgolette doppie nel contenuto:

<Button Name="Button" 
     Background="AntiqueWhite" 
     Content="{}{Background=&#0034;AntiqueWhite&#0034;}"/> 
11

Una nuova funzionalità di WPF consegnata con 3.5 SP1 è la possibilità di formattare la tua corda mentre leghi. Elimina l'utilizzo di IValueConverter per tali scenari comuni. Ecco alcuni esempi per farti andare, che ho copiato da this blog post

<TextBox Text="{Binding Path=Double, StringFormat=F3}"/> 
<TextBox Text="{Binding Path=Double, StringFormat=Amount: {0:C}}"/> 
<TextBox Text="{Binding Path=Double, StringFormat=Amount: \{0:C\}}"/> 
<TextBox> 
    <TextBox.Text> 
    <Binding Path="Double" StringFormat="{}{0:C}"/> 
    </TextBox.Text> 
</TextBox> 
0

A Grid con la Background sinistra come predefinito o set con un pennello Transparent non si attiva l'evento IsMouseOver a meno che il cursore si trova sopra un controllo che contiene. Per garantire che l'evento venga attivato sullo stesso Grid, simulare Transparency impostando Background nel colore del contenitore Background.

+2

non valido per i pennelli. Sfondo trasparente a partire da .net 4.0 (non so per le versioni precedenti), ma vero per lo sfondo predefinito impostato su "{ x: Null} "e non si comporta come Brushes.Transparent. Ad esempio: se si desidera intercettare mouseDownEvent su un controllo di sfondo trasparente, è necessario impostarne esplicitamente lo sfondo su Brushes.Transparent – David

5

IsMouseOver e IsMouseDirectlyOver sono eventi diversi. IsMouseOver risponde a tutti i movimenti del mouse all'interno di un controllo ed è bambini. IsMouseDirectlyOver risponde solo se il cursore si trova sopra il controllo stesso. Ad esempio, se si dispone di un'etichetta all'interno di un bordo, l'evento IsMouseDirectlyOver per il bordo viene attivato solo se il cursore si trova sopra il bordo stesso ma NON sopra l'etichetta contenuta.

+0

Non sono sicuro se la risposta risponda alla domanda originale, ma ha chiarito cosa stavo cercando. (+1) – jpierson

0

Un controllo con lo sfondo impostato su Trasparente NON attiva gli eventi IsMouseOver o IsMouseDirectlyOver. Ad esempio, se lo sfondo di un bordo è impostato su Trasparente ma BorderBrush = Blu e BorderWidth è <> 0, gli eventi MouseOver si attivano mentre si trova sul bordo stesso ma non mentre si trova all'interno del controllo.

18

Debugaggio del binding WPF.

Aggiunta di tracciamento oggetti rilegati:

<Window … 
xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase"/> 
    <TextBlock Text="{Binding Path=Caption, 
diagnostics:PresentationTraceSources.TraceLevel=High}"…/> 

Vedrete nella finestra di output più dettagli sulla rilegatura:

PropertyChanged event from SomeObject (hash=1) 
SetValue at level 0 from SomeObject (hash= 1) using RuntimePropertyInfo(Field): 
'False' 
TransferValue - got raw value 'False' 
TransferValue - using final value 'False' 

// EDIT Ulteriori informazioni here.

Ariel

2

La proprietà è BorderThickness. Non importa quante volte digiti BorderWidth, non funzionerà!

7

Visibility è un tre stati System.Windows.Visibility censimento:

  • Visible - L'elemento ottiene resa e partecipa nel layout.
  • Compresso: l'elemento è invisibile e non partecipa al layout. Dare in modo efficace altezza e larghezza a 0 e comportarsi come se non esistesse.
  • Nascosto - L'elemento è invisibile ma continua per partecipare al layout.
3

Padding e Margin vengono immessi utilizzando la sintassi delimitata da virgole e sono di tipo Spessore. Essi possono essere inseriti come:

  • Imbottitura = "5" (5 imbottitura è su tutti e quattro i lati)
  • Imbottitura = "5,10,15,20" (imbottitura è Sinistra: 5 Top: 10 Diritto : 15 in basso: 20)
  • Imbottitura = "5,10" (imbottitura è 5 a sinistra/destra e 10 sul alto/basso)
+0

Puoi anche delimitarli per spazio semplice. Riempimento = "5 10 15 20" –

3

Fornire una riga o colonna unica per un GridSplitter per garantire che non è nascosto da altri controlli e si comporta come previsto.

0

impostare una proprietà in codice dietro ad un DynamicResource:

Border_Toolbar.SetResourceReference(BackgroundProperty, "Brush_ToolbarBackground") 
2

Decidere dimensioni di un controllo basato su un altro in fase di esecuzione.

<... Width="{Binding ElementName=referenceElement, Path=ActualWidth}" ../> 

Questo può essere fatto anche con Height/MaxHeight ecc.