2009-05-13 5 views
0

Sorry für die grundlegenden Fragen, aber ich habe im Internet seit einer Reihe von Tagen gesucht und kann die Antwort auf diese Fragen nicht finden.Verweis auf XAML Custom Control Namen und Eigenschaften in VB-Code Hinter

Ich habe ein benutzerdefiniertes Steuerelement erstellt, und ich werde eine große Anzahl von Instanzen dieses benutzerdefinierten Steuerelements auf meiner XAML-Seite platzieren. Wie gehe ich mit dem Custom Control im VB-Code Behind vor?

  1. Wie verweisen ich den Namen des Custom Control (in meinem VB-Code), die mit dem Ereignis Mouseleftbuttondown geklickt wurde? Zum Beispiel, wenn ich 10 Instanzen meines Custom Controls in xaml habe, jedes mit einem anderen x: Namen (sagen wir 1-10), wie kann ich beim Anklicken einer bestimmten Instanz sehen, auf welche geklickt wurde? Ich habe eine Anzahl von Dingen einschließlich e.OriginalSource.Name versucht (die die Komponente innerhalb des Steuerelements zurückgibt, das geklickt wurde und nicht der Name der Instanz des Steuerelements).

  2. Meine benutzerdefinierte Steuerung besteht aus zahlreichen Teilen und Stücken (Rechtecke, Linien, Text usw.). Jedes dieser Elemente ist Teil meiner Ebene. Kann ich im VB-Code, sobald ich auf ein bestimmtes Steuerelement verweisen kann, bestimmte Teile dieses Steuerelements ausblenden oder ändern (z. B. das Ausblenden einer Zeile und das Ändern des Texts). Außerdem muss ich mehr als nur das Steuerelement ändern, auf das geklickt wurde. Daher muss ich auf die Eigenschaften aller Steuerelemente zugreifen können, nicht nur darauf, was angeklickt wurde. Wenn ich beispielsweise auf Kontrollinstanz Test1 klicke, muss ich auch Test2, Test3 und Test5 in irgendeiner Weise ändern.

Hier finden Sie einig Test-Code zusammen durch mich als Teil eines Silverlight-Projektes mit MS 2. Meine Kontrollmischung ist viel größer, und ich brauche 200-250 instances/Kopien der Zollkontrolle, ich brauche so wirklich um zu wissen, auf welche Kontrollinstanz/Kopie geklickt wurde.

Mein Usercontrol:

<UserControl 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" 
    x:Class="MyControl1" 
    x:Name="UserControl" 
    d:DesignWidth="60" d:DesignHeight="59"> 

    <Grid x:Name="LayoutRoot" MouseLeftButtonDown="OnMouseClick"> 
     <Rectangle x:Name="Rectangle1" Fill="#FFFFFFFF" Stroke="#FF000000"/> 
     <TextBox Background="{x:Null}" x:Name="TextBox1" Text="Test" TextWrapping="Wrap"/> 
     <Ellipse x:Name="Circle1" Fill="{x:Null}" Stroke="#FF000000"/> 
     <Path Margin="1,29,0,29" x:Name="Line1" Fill="{x:Null}" Stretch="Fill" Stroke="#FF000000" Data="M74,80 L132,80"/> 
     <Path Margin="0,0,1,14" x:Name="Line2" VerticalAlignment="Bottom" Height="1" Fill="#FFFFFFFF" Stretch="Fill" Stroke="#FF000000" Data="M73,95 L131,95"/> 
     <Path Margin="0,0,0,4" x:Name="Line3" VerticalAlignment="Bottom" Height="1" Fill="#FFFFFFFF" Stretch="Fill" Stroke="#FF000000" Data="M73,105 L132,105"/> 
    </Grid> 
</UserControl> 

Meine XAML-App der Custom Control mit:

<Grid x:Name="LayoutRoot"> 
    <Tester:MyControl1 HorizontalAlignment="Left" Margin="56,54,0,0" VerticalAlignment="Top" Width="60" Height="60" x:Name="Test1"/> 
    <Tester:MyControl1 HorizontalAlignment="Left" Margin="116,54,0,0" VerticalAlignment="Top" Width="60" Height="60" x:Name="Test2"/> 
    <Tester:MyControl1 HorizontalAlignment="Left" Margin="176,54,0,0" VerticalAlignment="Top" Width="60" Height="60" x:Name="Test3"/> 
    <Tester:MyControl1 HorizontalAlignment="Left" Margin="236,54,0,0" VerticalAlignment="Top" Width="60" Height="60" x:Name="Test4"/> 
    <Tester:MyControl1 HorizontalAlignment="Left" Margin="296,54,0,0" VerticalAlignment="Top" Width="60" Height="60" x:Name="Test5"/> 
</Grid> 

My Custom Control VB-Code:

Partial Public Class MyControl1 
    Public Sub New() 
     MyBase.New() 

     Me.InitializeComponent() 

     ' Insert code required on object creation below this point. 
    End Sub 

    Private Sub OnMouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) 

     Dim int_Temp As Integer 
     Dim str_InstanceName As String 

     str_InstanceName = "1.What code here tells me the name of the instance which was checked? Test1, Test2, etc. for example." 

     int_Temp = MessageBox.Show(str_InstanceName, "Testing", MessageBoxButton.OK) 

     '2.What code here lets me manipulate parts of my control instances (and not just the instance which was clicked)? 

       'I want to hide Test1.Line1 and Test2.Line3 and Test3.Circle1 and change the background of Test5.Rectangle1 for example. 

    End Sub 
End Class 

Vielen Dank im Voraus, und sorry an alle C# Experten, dass ich dies in VB benötigen.

Antwort

1

Es sieht so aus, als ob Sie von einem Benutzersteuerelement sprechen, nicht von einem benutzerdefinierten Steuerelement. Es gibt ein bisschen einen Unterschied, wenn man mit den zwei arbeitet. Sie können mehr über diese Unterschiede hier lesen:

Custom Controls Vs. User Controls

In diesem Fall möchten Sie an der ‚Absender‘ Objekt in Ihrem Event-Handler suchen werden. Sie möchten den Absender als Ihr Benutzersteuerelement umwandeln (dies ist sicher, da Sie nur diesen Ereignishandler für Steuerelemente Ihres Typs verwenden).

Ich kann den Code nicht kompilieren, um mich im Moment zu überprüfen ... aber es sollte Ihnen die Idee geben.