我有一个设备列表,用户将在列表中选择代表哪个设备的COM端口,每个设备都有其自己的StackPanel
,如下所示:
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Width="140" Text="IMT" VerticalAlignment="Center"/>
<ComboBox Width="250" Margin="0,0,40,0" x:Name="FM_list" SelectionChanged="DeviceSelected"/>
<TextBlock x:Name="FM_selection" Margin="0,0,40,0" Width="80 "/>
<Button Background="Red" Width="50" Click="Port_selected" x:Name="FM_selection1"/>
</StackPanel>
用户在ComboBox
中进行选择后,可以通过单击相邻的Button
进行验证。
我想要这样,以便在单击Button
中的x:Name
(或另一种引用方式)的TextBlock
时将其传递给Port_selected
函数,这样我就可以在发件人上呼叫TextBox.Name
时使用正确的设备。
我可以为每个按钮和字典分别设置x:Name
和一个字典,以匹配哪个按钮与哪个TextBlock
和哪个StackPanel
匹配,但是我想知道如何不使用解决方法。现在,我只剥离了Button
的{{1}} ...的最后一个字符...
答案 0 :(得分:0)
Port_selected
是事件处理程序,您不能将string
值传递给该事件处理程序。
如果您熟悉MVVM设计模式,则有更好的方法来解决此问题,例如使用命令和命令参数,但是在当前设置下,最简单的解决方案可能是在Windows中获取TextBlock
的引用。事件处理程序,然后获取其Name
属性的值,例如:
private void Port_selected(object sender, RoutedEventArgs e)
{
Button btn = (Button)sender;
StackPanel stackPanel = btn.Parent as StackPanel;
if (stackPanel != null)
{
TextBlock textBlock = stackPanel.Children
.OfType<TextBlock>()
.FirstOrDefault(x => !string.IsNullOrEmpty(x.Name));
if (textBlock != null)
{
string name = textBlock.Name;
//...
}
}
}