借助网络配置,控制Modbus工具的日志显示,避免卡死界面
智能大石头 authored at 2021-12-11 22:09:19
9.04 KiB
XCoder
<Window xmlns="https://github.com/avaloniaui"
        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" d:DesignWidth="1100" d:DesignHeight="750"
        x:Class="XCoderAv.Views.MqttWindow"
        Title="MQTT 客户端" Width="1100" Height="750"
        WindowStartupLocation="CenterOwner">
    <Window.Styles>
        <Style Selector="Border.GroupBorder">
            <Setter Property="BorderBrush" Value="#D0D0D0"/>
            <Setter Property="BorderThickness" Value="1"/>
            <Setter Property="Margin" Value="0,0,0,6"/>
        </Style>
        <Style Selector="TextBlock.SectionTitle">
            <Setter Property="FontWeight" Value="Bold"/>
            <Setter Property="Margin" Value="4,3"/>
            <Setter Property="FontSize" Value="13"/>
        </Style>
        <Style Selector="TextBox.ConfigTextBox">
            <Setter Property="Margin" Value="2"/>
            <Setter Property="Height" Value="26"/>
            <Setter Property="VerticalContentAlignment" Value="Center"/>
            <Setter Property="BorderThickness" Value="1"/>
            <Setter Property="BorderBrush" Value="#D0D0D0"/>
        </Style>
        <Style Selector="Button.ActionButton">
            <Setter Property="Height" Value="30"/>
            <Setter Property="Margin" Value="2"/>
            <Setter Property="Padding" Value="8,0"/>
        </Style>
        <Style Selector="Button.SendButton">
            <Setter Property="Height" Value="50"/>
            <Setter Property="Margin" Value="2"/>
            <Setter Property="FontSize" Value="14"/>
            <Setter Property="FontWeight" Value="Bold"/>
        </Style>
    </Window.Styles>

    <Grid Margin="6">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="300"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

        <!-- ============ 左侧:配置面板 ============ -->
        <ScrollViewer Grid.Column="0" VerticalScrollBarVisibility="Auto" Margin="0,0,4,0">
            <StackPanel>
                <!-- 连接配置 -->
                <Border Classes="GroupBorder">
                    <StackPanel>
                        <TextBlock Text="连接配置" Classes="SectionTitle"/>

                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Height="Auto"/>
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="50"/>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="Auto"/>
                            </Grid.ColumnDefinitions>

                            <TextBlock Grid.Row="0" Grid.Column="0" Text="地址" VerticalAlignment="Center" Margin="4,2"/>
                            <TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Server}" Classes="ConfigTextBox"/>

                            <TextBlock Grid.Row="1" Grid.Column="0" Text="标识" VerticalAlignment="Center" Margin="4,2"/>
                            <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding ClientId}" Classes="ConfigTextBox"/>

                            <TextBlock Grid.Row="2" Grid.Column="0" Text="用户" VerticalAlignment="Center" Margin="4,2"/>
                            <TextBox Grid.Row="2" Grid.Column="1" Text="{Binding UserName}" Classes="ConfigTextBox"/>

                            <TextBlock Grid.Row="3" Grid.Column="0" Text="密码" VerticalAlignment="Center" Margin="4,2"/>
                            <TextBox Grid.Row="3" Grid.Column="1" Text="{Binding Password}" Classes="ConfigTextBox"/>

                            <Button Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2"
                                    Content="{Binding ConnectButtonText}" Command="{Binding ToggleConnectCommand}"
                                    Classes="ActionButton" Margin="4,4"/>
                        </Grid>
                    </StackPanel>
                </Border>

                <!-- 订阅配置 -->
                <Border Classes="GroupBorder">
                    <StackPanel>
                        <TextBlock Text="订阅配置" Classes="SectionTitle"/>

                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Height="Auto"/>
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="50"/>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="Auto"/>
                            </Grid.ColumnDefinitions>

                            <TextBlock Grid.Row="0" Grid.Column="0" Text="主题" VerticalAlignment="Center" Margin="4,2"/>
                            <TextBox Grid.Row="0" Grid.Column="1" Text="{Binding SubscribeTopic}" Classes="ConfigTextBox"/>
                            <ComboBox Grid.Row="0" Grid.Column="2" ItemsSource="{Binding QosOptions}"
                                      SelectedIndex="{Binding SubscribeQos}" Width="60" Margin="2"/>

                            <Button Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3"
                                    Content="订阅" Command="{Binding SubscribeCommand}"
                                    Classes="ActionButton" Margin="4,4"/>
                        </Grid>
                    </StackPanel>
                </Border>
            </StackPanel>
        </ScrollViewer>

        <!-- ============ 右侧:发布 + 日志 ============ -->
        <Grid Grid.Column="1">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>

            <!-- 发布区 -->
            <Border Grid.Row="0" Classes="GroupBorder">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="*"/>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>

                    <Grid Grid.Row="0">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="50"/>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="Auto"/>
                        </Grid.ColumnDefinitions>
                        <TextBlock Grid.Column="0" Text="主题" VerticalAlignment="Center" Margin="4,2"/>
                        <TextBox Grid.Column="1" Text="{Binding PublishTopic}" Classes="ConfigTextBox"/>
                        <ComboBox Grid.Column="2" ItemsSource="{Binding QosOptions}"
                                  SelectedIndex="{Binding PublishQos}" Width="60" Margin="2"/>
                        <CheckBox Grid.Column="3" Content="保留" IsChecked="{Binding Retain}" VerticalAlignment="Center" Margin="4,0"/>
                    </Grid>

                    <TextBox Grid.Row="1" Text="{Binding PublishText}" AcceptsReturn="True"
                             MinHeight="80" FontFamily="Consolas" Margin="2"/>

                    <Button Grid.Row="2" Content="发布" Command="{Binding PublishCommand}"
                            Classes="SendButton" Height="40" Margin="4,4"/>
                </Grid>
            </Border>

            <!-- 日志区 -->
            <Border Grid.Row="1" Classes="GroupBorder">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="*"/>
                    </Grid.RowDefinitions>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="Auto"/>
                        </Grid.ColumnDefinitions>
                        <TextBlock Text="日志" FontWeight="Bold" Margin="4,2"/>
                        <Button Grid.Column="1" Content="清空" Command="{Binding ClearLogCommand}"
                                Height="26" Margin="2" Padding="8,0"/>
                    </Grid>
                    <TextBox Grid.Row="1" x:Name="txtLog" IsReadOnly="True"
                             AcceptsReturn="True"
                             FontFamily="Consolas" FontSize="12" Background="#1E1E1E" Foreground="#D4D4D4"
                             Margin="2"/>
                </Grid>
            </Border>
        </Grid>
    </Grid>
</Window>