Ссылка на имена и свойства пользовательского элемента управления XAML в коде VB Behind - PullRequest
0 голосов
/ 14 мая 2009

Извините за основные вопросы, но я искал в Интернете несколько дней и не могу найти ответ на эти вопросы.

Я создал пользовательский элемент управления и буду размещать большое количество экземпляров этого пользовательского элемента управления на своей странице xaml. При работе с этим пользовательским элементом управления в коде VB, как мне сделать следующее?

  1. Как мне сослаться на имя пользовательского элемента управления (в моем VB-коде), по которому щелкнуло событие MouseLeftButtonDown? Например, если у меня есть 10 экземпляров моего пользовательского элемента управления в xaml, каждый с различным x: name (скажем, 1-10), при нажатии на конкретный экземпляр, как я могу увидеть, какой из них был нажат? Я пробовал несколько вещей, включая e.OriginalSource.Name (который возвращает компонент внутри элемента управления, по которому был выполнен щелчок, а не имя экземпляра элемента управления).

  2. Мой пользовательский элемент управления состоит из множества частей и элементов (прямоугольников, линий, текста и т. Д.). Каждый из этих предметов является частью моего слоя. В коде VB, когда я могу ссылаться на конкретный элемент управления, как я могу скрыть или изменить определенные части этого элемента управления (например, скрытие строки и изменение текста). Кроме того, мне нужно изменить не только элемент управления, по которому был выполнен щелчок, поэтому я должен иметь возможность доступа к свойствам всех элементов управления, а не только к тому, что было нажато. Например, если я щелкаю по экземпляру Control Test1, мне также необходимо каким-то образом изменить Test2, Test3 и Test5.

Вот некоторый тестовый код, который я выполняю вместе в рамках проекта Silverlight с использованием MS Blend 2. Мой элемент управления намного больше, и мне нужно 200 - 250 экземпляров / копий этого пользовательского элемента управления, поэтому мне действительно нужно знать, какой элемент управления нажата копия / копия.

Мой пользовательский контроль:

<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>

Приложение My xaml, использующее пользовательский элемент управления:

<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>

Код пользовательского контроля VB:

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 

Заранее спасибо, и извините всех экспертов C #, что мне это нужно в VB.

1 Ответ

1 голос
/ 14 мая 2009

Похоже, вы говорите о пользовательском элементе управления, а не о пользовательском элементе управления. Есть небольшая разница при работе с ними. Вы можете прочитать больше об этих различиях здесь:

Пользовательские элементы управления Vs. Элементы управления пользователя

В этом случае вы хотите посмотреть на объект 'sender' в вашем обработчике событий. Вы хотите использовать отправителя в качестве пользовательского элемента управления (это будет безопасно, поскольку вы используете этот обработчик событий только для элементов управления вашего типа).

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

    Dim senderAsControl As MyControl1 = sender As MyControl1

    ' Get the instance name from the sender
    Dim instanceName As String = senderAsControl.Name

    ' You can also access your children from the sender once cast
    senderAsControl.Rectangel1.IsVisible = False ' Hide the rectangle

End Sub

Я не могу скомпилировать код для двойной проверки себя в данный момент ... но он должен дать вам идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...