2009-05-13 9 views
0

基本的な質問は申し訳ありませんが、Webを数日間検索していて、これらの質問に対する回答を見つけることはできません。VBコード内でのXAMLカスタムコントロールの名前とプロパティの参照

私はカスタムコントロールを作成しました。そのカスタムコントロールのインスタンスをxamlページに多数配置します。 VB Code BehindのCustom Controlで作業するには、どうしたらいいですか?

  1. MouseLeftButtonDownイベントでクリックされたカスタムコントロールの名前(VBコード内)を参照するにはどうすればよいですか?たとえば、xamlに10個のカスタムコントロールがあり、それぞれが異なるx:名前(例:1-10)を持つ場合、特定のインスタンスがクリックされたときに、どのインスタンスがクリックされたかをどのように確認できますか?私は、e.OriginalSource.Name(コントロール内のコンポーネントを返す、コントロールのインスタンス名ではなく)を返すなど、多くのことを試しました。

  2. 私のカスタムコントロールは、多数の部品(長方形、線、テキストなど)で構成されています。これらのアイテムはそれぞれ自分のレイヤーの一部です。 VBコードでは、特定のコントロールを参照できるようになったら、そのコントロールの特定の部分を非表示にしたり、変更したりすることができます(線の非表示やテキストの変更など)。また、私はクリックされたコントロール以外のものを変更する必要があるので、クリックされたものだけでなく、すべてのコントロールのプロパティにアクセスできる必要があります。たとえば、コントロールインスタンスTest1をクリックすると、何らかの形でTest2、Test3、およびTest5も変更する必要があります。ここで

は、いくつかのテストコードは、私のコントロール2. MSのブレンドを使用してのSilverlightプロジェクトの一環として、Iを通じて一緒ですはるかに大きい、と私は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> 

私のXAMLのApp::

<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 

事前のおかげで、私はVBでこれを必要とするすべてのC#の専門家に申し訳ありません。

答えて

1

あなたがカスタムコントロールではなくユーザーコントロールについて話しているようです。両者を扱うときには少し違いがあります。あなたはここにそれらの違いについての詳細を読むことができます:

この場合

Custom Controls Vs. User Controls

、あなたのイベントハンドラで「送信者のオブジェクトを見ていることにしたいです。送信者をユーザーコントロールとしてキャストしたいとします(これは、自分のタイプのコントロールでのみそのイベントハンドラを使用しているので安全です)。

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 

現時点で自分自身を二重にチェックするコードをコンパイルすることはできません...しかし、それはあなたに考えを与えるはずです。

関連する問題