J'ai un contrôle personnalisé, qui ressemble généralement à ceci:WPF contrôle personnalisé à l'intérieur ItemsControl
public class MyTextBlockTest : Control
{
static MyTextBlockTest()
{
}
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string),
typeof(MyTextBlockTest), new FrameworkPropertyMetadata(""));
public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
protected override void OnRender(DrawingContext drawingContext)
{
base.OnRender(drawingContext);
FontFamily font = new FontFamily("Times New Roman");
Typeface typeface = new Typeface(font, FontStyles.Normal, FontWeights.Normal, FontStretches.Normal);
FormattedText ft = new FormattedText(Text,
System.Globalization.CultureInfo.CurrentCulture,
System.Windows.FlowDirection.LeftToRight,
typeface,
15.0,
Brushes.Black);
var point = this.PointToScreen(new Point(0, 0));
drawingContext.DrawText(ft, point);
}
}
Je suis en train d'utiliser cette commande à l'intérieur d'un ItemsControl
:
<ScrollViewer>
<ItemsControl ItemsSource="{Binding BigList, ElementName=MainWindowView}" Margin="0,-1,0,1">
<ItemsControl.ItemTemplate>
<DataTemplate>
<!--<TextBlock Text="{Binding}"/>-->
<controls:MyTextBlockTest Text="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
Si activer la TextBlock
qui a été commenté, la liste affiche bien; cependant, avec mon contrôle personnalisé, WPF ne place pas le texte au bon endroit; Plus précisément, il semble simplement imprimer tous les éléments les uns sur les autres. L'appel this.PointToScreen
était mon idée initiale pour lui donner une invite, mais je ne suis pas sûr (même si cela a fonctionné, ce qui ne fonctionne pas) si cela réagirait favorablement avec le ScrollViewer. Je réalise que je pourrais simplement baser ce contrôle sur le contrôle TextBlock, mais je veux spécifiquement le baser sur un contrôle de niveau inférieur en tant qu'expérience de performance. S'il vous plaît quelqu'un pourrait me diriger vers une méthode pour placer le contrôle personnalisé sur l'écran correctement?
Pourquoi utilisez-vous PointToScreen? Que se passerait-il si seulement dessiner à (0,0)? – Evk
Essayé d'abord, il met juste dans le coin supérieur –
Coin supérieur de contrôle ou ItemsControl? – Evk