Sto utilizzando il controllo Infragistics XamDateTimeEditor e desidero aggiungere una proprietà di dipendenza per consentire allo sviluppatore di scegliere di avere tutto il testo selezionato quando il controllo diventa attivo. Ho creato uno stile che viene utilizzato per impostare il comportamento che voglio, ma voglio che lo sviluppatore decida se il comportamento debba essere eseguito sulla base di una proprietà di dipendenza booleana. Non sono sicuro di come sia fatto.Aggiungere la proprietà di dipendenza al controllo
risposta
Presumo che tu abbia ereditato da XamDateTimeEditor per questo.
Se è possibile scrivere il codice fa riferimento a un (CLR) proprietà "standard", allora siete pronti per partire:
- dichiarare il vostro DependencyProperty
rimuovere il campo di supporto e sostituire l'attuazione del proprietà standard in modo che acceda a DependencyProperty anziché al campo di supporto.
public class MyXamDateTimeEditor : XamDateTimeEditor { public static readonly DependencyProperty IsSelectOnFocusEnabledProperty = DependencyProperty.Register("IsSelectOnFocusEnabled", typeof(bool), typeof(MyXamDateTimeEditor), new UIPropertyMetadata(false)); public boolIsSelectOnFocusEnabled { get { return (bool)GetValue(IsSelectOnFocusEnabledProperty); } set { SetValue(IsSelectOnFocusEnabledProperty, value); } } }
Poi, quando si accede IsSelectOnFocusEnabled nel codice restituirà il valore corrente della proprietà di dipendenza.
È inoltre possibile configurarlo per ricevere notifiche ogni volta che la proprietà cambia, ma non vedo perché si dovrebbe nel vostro caso.
C'è anche un'altra opzione per questo trucco, che non usa ereditarietà e una proprietà allegata se lo desideri.
UPDATE:
OK, da quando è stato richiesto, ecco un modo per ottenere che per ogni casella di testo. Dovrebbe essere facile da tradurre in qualunque evento tu usi per farlo su un altro tipo di controllo.
public class TextBoxBehaviors
{
public static bool GetIsSelectOnFocusEnabled(DependencyObject obj)
{
return (bool)obj.GetValue(IsSelectOnFocusEnabledProperty);
}
public static void SetIsSelectOnFocusEnabled(DependencyObject obj, bool value)
{
obj.SetValue(IsSelectOnFocusEnabledProperty, value);
}
public static readonly DependencyProperty IsSelectOnFocusEnabledProperty =
DependencyProperty.RegisterAttached("IsSelectOnFocusEnabled", typeof(bool),
typeof(TextBoxBehaviors),
new UIPropertyMetadata(false, new PropertyChangedCallback(OnSelectOnFocusChange)));
private static void OnSelectOnFocusChange(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (d is TextBox)
{
var tb = d as TextBox;
if ((bool)e.NewValue)
{
tb.GotFocus += new RoutedEventHandler(tb_GotFocus);
}
else
{
tb.GotFocus -= new RoutedEventHandler(tb_GotFocus);
}
}
}
static void tb_GotFocus(object sender, RoutedEventArgs e)
{
var tb = sender as TextBox;
tb.SelectAll();
}
}
Il modo in cui lo si utilizza è il seguente, ad esempio:
<Window x:Class="WpfApplication2.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication2"
Title="Window1" Height="300" Width="300">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBox Text="No Select All" x:Name="TextBox1"/>
<CheckBox Content="Auto Select"
Grid.Column="1"
IsChecked="{Binding Path=(local:TextBoxBehaviors.IsSelectOnFocusEnabled), ElementName=TextBox1, Mode=TwoWay}" />
<TextBox Grid.Row="1" Text="djkhfskhfkdssdkj"
local:TextBoxBehaviors.IsSelectOnFocusEnabled="true" />
</Grid>
</Window>
Questo mostra come impostare la proprietà per attivare il comportamento, e come associare a qualcosa d'altro, se necessario essere. Si noti che questo esempio specifico non è perfetto (se lo si sfoglia, se si fa clic all'interno del controllo, la casella di testo ha una logica interna che deseleziona effettivamente il testo, ma questo è solo un esempio su come allegare comportamenti ai controlli tramite proprietà collegate).
- 1. Legame proprietà dipendenza controllo personalizzato
- 2. Come aggiungere una proprietà al controllo di Winforms esistente
- 3. MVVM + UserControl + proprietà di dipendenza
- 4. Controllo utente con proprietà di dipendenza ItemsSource personalizzata
- 5. WinForms DataBind al di controllo visibile Proprietà
- 6. Aggiunta di proprietà al controllo WPF personalizzato?
- 7. Controllo di dipendenza
- 8. Silverlight: Proprietà controllo controllo programmabile
- 9. Come viene implementata la proprietà di dipendenza?
- 10. Come creare una proprietà Dipendenza su un controllo esistente?
- 11. Come esporre una proprietà di dipendenza di un controllo nidificato in un controllo utente?
- 12. Proprietà dipendenza in app.xaml.cs
- 13. Come aggiungere il controllo utente al pannello
- 14. Come aggiungere un RequiredFieldValidator al controllo DropDownList?
- 15. Proprietà dipendenza Utilizza in WPF
- 16. Come posso aggiungere la logica a un callback di proprietà di dipendenza esistente?
- 17. Conversione di proprietà normali in proprietà di dipendenza
- 18. Xcode 4: Come aggiungere dipendenza della cartella statica al progetto
- 19. Impossibile associare una proprietà associata a un'altra proprietà di dipendenza
- 20. Errore proprietà dipendenza
- 21. UserControl Dipendenza Proprietà tempo di progettazione
- 22. Impossibile aggiungere dipendenza file XStream al progetto Android Studio
- 23. WPF ValidationRule con proprietà di dipendenza
- 24. IValueConverter con proprietà dipendenza dipendente
- 25. Come aggiungere dipendenza a Cocoapods
- 26. Come associare la proprietà di un controllo a una proprietà di un altro controllo?
- 27. La dipendenza di gradle compile non viene aggiunta al classpath
- 28. WPF - Binding ObservableCollection proprietà di dipendenza all'interno di un UserControl
- 29. Utilizzo di valori elevati nelle proprietà di dipendenza (XAML)
- 30. Crea rapidamente proprietà di dipendenza in VS
Cosa succede se XamDateTimeEditor non estende DependencyObject? Il codice non verrà compilato. Per esempio sto estendendo un comportamento e voglio aggiungere una proprietà di dipendenza ad esso che non posso. – rolls