Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# wpf用户控件-如何从外部uc设置文本_C#_Wpf - Fatal编程技术网

C# wpf用户控件-如何从外部uc设置文本

C# wpf用户控件-如何从外部uc设置文本,c#,wpf,C#,Wpf,我有一个问题,我有2个uc显示在主窗口中。 我希望当我按下第一个uc中的on按钮时,另一个uc中的文本将发生变化 <Grid.RowDefinitions> <RowDefinition ></RowDefinition> </Grid.RowDefinitions>

我有一个问题,我有2个uc显示在主窗口中。 我希望当我按下第一个uc中的on按钮时,另一个uc中的文本将发生变化

                        <Grid.RowDefinitions>
                            <RowDefinition ></RowDefinition>
                        </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition></ColumnDefinition>
                    </Grid.ColumnDefinitions>
                    <Button Width="40" Height="40" Name="playbtn"  HorizontalAlignment="Left" Grid.Row="0" Grid.Column="0" Click="playbtn_Click" >
                        <Button.Content>
                            <Image Source="/img/player_play.png"  ></Image>
                        </Button.Content>
                    </Button>
                    <Button Width="40" Height="40" Name="pausebtn" Grid.Column="1"   Grid.Row="0" >
                        <Button.Content>
                            <Image Source="/img/player_pause.png" ></Image>
                        </Button.Content>
                    </Button>
                    <Button Width="40" Height="40" Name="stopbtn" Grid.Column="2"   Grid.Row="0" >
                        <Button.Content>
                            <Image Source="/img/player_stop.png" ></Image>
                        </Button.Content>
                    </Button>
                </Grid>

            </StackPanel>
        </Grid>
    </StackPanel>


  secound uc   <TextBlock Name="Progresstimertext" Text="00:00:00" FontSize="20"></TextBlock>
这是我使用的axml和代码 第一加州大学

                        <Grid.RowDefinitions>
                            <RowDefinition ></RowDefinition>
                        </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition></ColumnDefinition>
                    </Grid.ColumnDefinitions>
                    <Button Width="40" Height="40" Name="playbtn"  HorizontalAlignment="Left" Grid.Row="0" Grid.Column="0" Click="playbtn_Click" >
                        <Button.Content>
                            <Image Source="/img/player_play.png"  ></Image>
                        </Button.Content>
                    </Button>
                    <Button Width="40" Height="40" Name="pausebtn" Grid.Column="1"   Grid.Row="0" >
                        <Button.Content>
                            <Image Source="/img/player_pause.png" ></Image>
                        </Button.Content>
                    </Button>
                    <Button Width="40" Height="40" Name="stopbtn" Grid.Column="2"   Grid.Row="0" >
                        <Button.Content>
                            <Image Source="/img/player_stop.png" ></Image>
                        </Button.Content>
                    </Button>
                </Grid>

            </StackPanel>
        </Grid>
    </StackPanel>


  secound uc   <TextBlock Name="Progresstimertext" Text="00:00:00" FontSize="20"></TextBlock>

赛科大学
所以我想按下启动按钮,计时器会改变吗?如何

                        <Grid.RowDefinitions>
                            <RowDefinition ></RowDefinition>
                        </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition></ColumnDefinition>
                    </Grid.ColumnDefinitions>
                    <Button Width="40" Height="40" Name="playbtn"  HorizontalAlignment="Left" Grid.Row="0" Grid.Column="0" Click="playbtn_Click" >
                        <Button.Content>
                            <Image Source="/img/player_play.png"  ></Image>
                        </Button.Content>
                    </Button>
                    <Button Width="40" Height="40" Name="pausebtn" Grid.Column="1"   Grid.Row="0" >
                        <Button.Content>
                            <Image Source="/img/player_pause.png" ></Image>
                        </Button.Content>
                    </Button>
                    <Button Width="40" Height="40" Name="stopbtn" Grid.Column="2"   Grid.Row="0" >
                        <Button.Content>
                            <Image Source="/img/player_stop.png" ></Image>
                        </Button.Content>
                    </Button>
                </Grid>

            </StackPanel>
        </Grid>
    </StackPanel>


  secound uc   <TextBlock Name="Progresstimertext" Text="00:00:00" FontSize="20"></TextBlock>

10x

这应该在主窗口的视图模型中进行管理,因为这似乎是唯一一个同时了解这两个控件的位置,而且听起来好像每个用户控件都不一定相互了解

                        <Grid.RowDefinitions>
                            <RowDefinition ></RowDefinition>
                        </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition></ColumnDefinition>
                    </Grid.ColumnDefinitions>
                    <Button Width="40" Height="40" Name="playbtn"  HorizontalAlignment="Left" Grid.Row="0" Grid.Column="0" Click="playbtn_Click" >
                        <Button.Content>
                            <Image Source="/img/player_play.png"  ></Image>
                        </Button.Content>
                    </Button>
                    <Button Width="40" Height="40" Name="pausebtn" Grid.Column="1"   Grid.Row="0" >
                        <Button.Content>
                            <Image Source="/img/player_pause.png" ></Image>
                        </Button.Content>
                    </Button>
                    <Button Width="40" Height="40" Name="stopbtn" Grid.Column="2"   Grid.Row="0" >
                        <Button.Content>
                            <Image Source="/img/player_stop.png" ></Image>
                        </Button.Content>
                    </Button>
                </Grid>

            </StackPanel>
        </Grid>
    </StackPanel>


  secound uc   <TextBlock Name="Progresstimertext" Text="00:00:00" FontSize="20"></TextBlock>
理想情况下,您应该在代码隐藏中对每个用户控件都有一个引用(或者,如果您有一个专用的视图模型类,就应该有一个视图模型类)

                        <Grid.RowDefinitions>
                            <RowDefinition ></RowDefinition>
                        </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition></ColumnDefinition>
                    </Grid.ColumnDefinitions>
                    <Button Width="40" Height="40" Name="playbtn"  HorizontalAlignment="Left" Grid.Row="0" Grid.Column="0" Click="playbtn_Click" >
                        <Button.Content>
                            <Image Source="/img/player_play.png"  ></Image>
                        </Button.Content>
                    </Button>
                    <Button Width="40" Height="40" Name="pausebtn" Grid.Column="1"   Grid.Row="0" >
                        <Button.Content>
                            <Image Source="/img/player_pause.png" ></Image>
                        </Button.Content>
                    </Button>
                    <Button Width="40" Height="40" Name="stopbtn" Grid.Column="2"   Grid.Row="0" >
                        <Button.Content>
                            <Image Source="/img/player_stop.png" ></Image>
                        </Button.Content>
                    </Button>
                </Grid>

            </StackPanel>
        </Grid>
    </StackPanel>


  secound uc   <TextBlock Name="Progresstimertext" Text="00:00:00" FontSize="20"></TextBlock>
如果在代码隐藏中,您只需通过给它们命名来公开它们

                        <Grid.RowDefinitions>
                            <RowDefinition ></RowDefinition>
                        </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition></ColumnDefinition>
                    </Grid.ColumnDefinitions>
                    <Button Width="40" Height="40" Name="playbtn"  HorizontalAlignment="Left" Grid.Row="0" Grid.Column="0" Click="playbtn_Click" >
                        <Button.Content>
                            <Image Source="/img/player_play.png"  ></Image>
                        </Button.Content>
                    </Button>
                    <Button Width="40" Height="40" Name="pausebtn" Grid.Column="1"   Grid.Row="0" >
                        <Button.Content>
                            <Image Source="/img/player_pause.png" ></Image>
                        </Button.Content>
                    </Button>
                    <Button Width="40" Height="40" Name="stopbtn" Grid.Column="2"   Grid.Row="0" >
                        <Button.Content>
                            <Image Source="/img/player_stop.png" ></Image>
                        </Button.Content>
                    </Button>
                </Grid>

            </StackPanel>
        </Grid>
    </StackPanel>


  secound uc   <TextBlock Name="Progresstimertext" Text="00:00:00" FontSize="20"></TextBlock>
<Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:controls="your controls reference here">

    <Grid>

        <Grid.ColumnDefinitions>
            </ColumnDefinition>
            </ColumnDefinition>
        </Grid.ColumnDefinitions>

        <controls:UserControl1 x:Name="Control1"/>

        <controls:UserControl2 x:Name="Control2" Grid.Column="1"/>

    </Grid>

</Window>
在哪里做这个?您可能想在您的控件1上创建一个停止的事件,您可以将它附加到您的代码后面-在您的情况下,类似于停止的。在您的UserControl1类中,您应该声明如下内容

                        <Grid.RowDefinitions>
                            <RowDefinition ></RowDefinition>
                        </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition></ColumnDefinition>
                    </Grid.ColumnDefinitions>
                    <Button Width="40" Height="40" Name="playbtn"  HorizontalAlignment="Left" Grid.Row="0" Grid.Column="0" Click="playbtn_Click" >
                        <Button.Content>
                            <Image Source="/img/player_play.png"  ></Image>
                        </Button.Content>
                    </Button>
                    <Button Width="40" Height="40" Name="pausebtn" Grid.Column="1"   Grid.Row="0" >
                        <Button.Content>
                            <Image Source="/img/player_pause.png" ></Image>
                        </Button.Content>
                    </Button>
                    <Button Width="40" Height="40" Name="stopbtn" Grid.Column="2"   Grid.Row="0" >
                        <Button.Content>
                            <Image Source="/img/player_stop.png" ></Image>
                        </Button.Content>
                    </Button>
                </Grid>

            </StackPanel>
        </Grid>
    </StackPanel>


  secound uc   <TextBlock Name="Progresstimertext" Text="00:00:00" FontSize="20"></TextBlock>
public event EventHandler Stopped;
然后在本地事件处理程序中单击停止按钮的调用该事件

                        <Grid.RowDefinitions>
                            <RowDefinition ></RowDefinition>
                        </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition></ColumnDefinition>
                    </Grid.ColumnDefinitions>
                    <Button Width="40" Height="40" Name="playbtn"  HorizontalAlignment="Left" Grid.Row="0" Grid.Column="0" Click="playbtn_Click" >
                        <Button.Content>
                            <Image Source="/img/player_play.png"  ></Image>
                        </Button.Content>
                    </Button>
                    <Button Width="40" Height="40" Name="pausebtn" Grid.Column="1"   Grid.Row="0" >
                        <Button.Content>
                            <Image Source="/img/player_pause.png" ></Image>
                        </Button.Content>
                    </Button>
                    <Button Width="40" Height="40" Name="stopbtn" Grid.Column="2"   Grid.Row="0" >
                        <Button.Content>
                            <Image Source="/img/player_stop.png" ></Image>
                        </Button.Content>
                    </Button>
                </Grid>

            </StackPanel>
        </Grid>
    </StackPanel>


  secound uc   <TextBlock Name="Progresstimertext" Text="00:00:00" FontSize="20"></TextBlock>
private void Stop_Click(object sender, RoutedEventArgs e)
{
    if (Stopped != null)
        Stopped(this, e);
}
将其附加到主窗口中:

                        <Grid.RowDefinitions>
                            <RowDefinition ></RowDefinition>
                        </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition></ColumnDefinition>
                    </Grid.ColumnDefinitions>
                    <Button Width="40" Height="40" Name="playbtn"  HorizontalAlignment="Left" Grid.Row="0" Grid.Column="0" Click="playbtn_Click" >
                        <Button.Content>
                            <Image Source="/img/player_play.png"  ></Image>
                        </Button.Content>
                    </Button>
                    <Button Width="40" Height="40" Name="pausebtn" Grid.Column="1"   Grid.Row="0" >
                        <Button.Content>
                            <Image Source="/img/player_pause.png" ></Image>
                        </Button.Content>
                    </Button>
                    <Button Width="40" Height="40" Name="stopbtn" Grid.Column="2"   Grid.Row="0" >
                        <Button.Content>
                            <Image Source="/img/player_stop.png" ></Image>
                        </Button.Content>
                    </Button>
                </Grid>

            </StackPanel>
        </Grid>
    </StackPanel>


  secound uc   <TextBlock Name="Progresstimertext" Text="00:00:00" FontSize="20"></TextBlock>
<controls:UserControl1 x:Name="Control1" Stopped=Control1_Stopped/>