Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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
WPF控件不显示甚至使其可见_Wpf_Canvas_Listbox_Wpf Controls_Redraw - Fatal编程技术网

WPF控件不显示甚至使其可见

WPF控件不显示甚至使其可见,wpf,canvas,listbox,wpf-controls,redraw,Wpf,Canvas,Listbox,Wpf Controls,Redraw,我遇到了一个我不知道如何解决的问题。我在主窗口上有“AddAccount”(按钮)、“AccountsTextBlock”和一个列表框。如果未添加用户,列表框将隐藏,一旦添加用户,列表框将在同一屏幕上显示ListBox、AddAccount和AccountsTextBlock,但AddAccount和AccountsTextBlock将位于与没有用户时不同的位置。问题是AddAccount和AccountsTextBlock没有显示,但显示了一个虚线矩形 <Grid> <

我遇到了一个我不知道如何解决的问题。我在主窗口上有“AddAccount”(按钮)、“AccountsTextBlock”和一个列表框。如果未添加用户,列表框将隐藏,一旦添加用户,列表框将在同一屏幕上显示ListBox、AddAccount和AccountsTextBlock,但AddAccount和AccountsTextBlock将位于与没有用户时不同的位置。问题是AddAccount和AccountsTextBlock没有显示,但显示了一个虚线矩形

<Grid>
    <Canvas>
        <TextBlock x:Name="AddAccountTextBlock" HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" Height="60" Width="369" Text="Add account to allow for simple access to your company resources&#xD;&#xA;" SnapsToDevicePixels="True" Canvas.Left="38" Canvas.Top="313"/>
        <Button x:Name="AddAccount" Content="Add Account" Canvas.Left="145" Canvas.Top="333" HorizontalAlignment="Left" VerticalAlignment="Top" Width="140" RenderTransformOrigin="0.466,0.977" IsCancel="True" Height="40" Foreground="White" Background="Blue" Click="OnAddAccount"/>
        <TextBlock x:Name="AccountsTextBlock" Canvas.Left="176" TextWrapping="Wrap" Text="Accounts" Canvas.Top="10" Height="33" Width="68" FontSize="16" FontFamily="Tahoma"/>
    </Canvas>
    <ListBox x:Name="accounts" HorizontalAlignment="Left" Height="237" VerticalAlignment="Top" Width="444" SelectionChanged="ListBox_SelectionChanged" Background="White" BorderBrush="White" Margin="0,47,0,0" RenderTransformOrigin="0.5,0.5">
        <ListBox.RenderTransform>
            <TransformGroup>
                <ScaleTransform/>
                <SkewTransform AngleX="0.384"/>
                <RotateTransform/>
                <TranslateTransform X="-0.794"/>
            </TransformGroup>
        </ListBox.RenderTransform>
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="Height" Value="100"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ListBoxItem">
                            <Border Name="_Border" BorderBrush="Gray" BorderThickness="0.5"
                            Padding="2"
                            SnapsToDevicePixels="true">
                                <ContentPresenter />
                            </Border>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsSelected" Value="true">
                                    <Setter TargetName="_Border" Property="Background" Value="LightSkyBlue"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </ListBox.ItemContainerStyle>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid Margin="3">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="*" />
                    </Grid.ColumnDefinitions>
                    <Image HorizontalAlignment="Left" VerticalAlignment="Center" Grid.Row="0" Grid.Column="0" Width="100" Source="{Binding Path=imagePath}" />
                    <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Row="0" Grid.Column="1" Text="{Binding Path=userInfo}"></TextBlock>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

public MainWindow()
{
    InitializeComponent();

    using (RegistryKey key = Registry.CurrentUser.CreateSubKey(authenticatorRegistryKey))
    {
        Object valueStr = Registry.GetValue(authenticatorRegistryKey, addedUsersRegistryValueName, null);
        if (valueStr == null)
        {
            //no users added yet, hide list box and move add button
            accounts.Visibility = Visibility.Collapsed;
            AccountsTextBlock.Visibility = Visibility.Collapsed;
            Canvas.SetLeft(AddAccountTextBlock, (Application.Current.MainWindow.Width - AddAccountTextBlock.Width) / 2);
            Canvas.SetTop(AddAccountTextBlock, (Application.Current.MainWindow.Height - AddAccountTextBlock.Height) / 2 - AddAccount.Height + 10);
            Canvas.SetLeft(AddAccount, (Application.Current.MainWindow.Width - AddAccount.Width) / 2);
            Canvas.SetTop(AddAccount, (Application.Current.MainWindow.Height - AddAccount.Height) / 2);
        }
        else
        {
            //show the added user
            List<UserInfo> items = new List<UserInfo>();
            items.Add(new UserInfo()
            {
                userInfo = "abcdefg",
                imagePath = ""
            });

            accounts.ItemsSource = items;
            AccountsTextBlock.Visibility = Visibility.Visible;
            accounts.Visibility = Visibility.Visible;
        }
    }
}

private void OnAddAccount(object sender, RoutedEventArgs e)
{

    SignInUrlWindow signInUrlWindow = new SignInUrlWindow();
    signInUrlWindow.Left = Application.Current.MainWindow.Left;
    signInUrlWindow.Top = Application.Current.MainWindow.Top;
    signInUrlWindow.Width = Application.Current.MainWindow.Width;
    signInUrlWindow.Height = Application.Current.MainWindow.Height;
    signInUrlWindow.ShowDialog();

    List<UserInfo> items = new List<UserInfo>();
    items.Add(new UserInfo()
    {
        userInfo = "abcdefg",
        imagePath = ""
    });

    accounts.ItemsSource = items;

    accounts.Visibility = Visibility.Visible;
    AddAccount.Visibility = Visibility.Visible;
    AccountsTextBlock.Visibility = Visibility.Visible;
}

公共主窗口()
{
初始化组件();
使用(RegistryKey key=Registry.CurrentUser.CreateSubKey(AuthenticateTorRegistryKey))
{
Object valueStr=Registry.GetValue(authenticatorRegistryKey,addedUserRegistryValueName,null);
如果(valueStr==null)
{
//尚未添加用户,隐藏列表框并移动添加按钮
accounts.Visibility=Visibility.Collapsed;
AccountsTextBlock.Visibility=可见性。已折叠;
SetLeft(AddAccountTextBlock,(Application.Current.MainWindow.Width-AddAccountTextBlock.Width)/2);
SetTop(AddAccountTextBlock,(Application.Current.MainWindow.Height-AddAccountTextBlock.Height)/2-AddAccount.Height+10);
SetLeft(AddAccount,(Application.Current.MainWindow.Width-AddAccount.Width)/2);
SetTop(AddAccount,(Application.Current.MainWindow.Height-AddAccount.Height)/2);
}
其他的
{
//显示添加的用户
列表项=新列表();
items.Add(新用户信息()
{
userInfo=“abcdefg”,
imagePath=“”
});
accounts.ItemsSource=项目;
AccountsTextBlock.Visibility=可见性.Visibility;
accounts.Visibility=可见性.Visibility;
}
}
}
数据帐户上的私有void(对象发送方,RoutedEventArgs e)
{
SIGNINULWINDOW SIGNINULWINDOW=新SIGNINULWINDOW();
SIGNINULWINDOW.Left=Application.Current.MainWindow.Left;
signInUrlWindow.Top=Application.Current.MainWindow.Top;
SigninNurlWindow.Width=Application.Current.MainWindow.Width;
signinURL窗口高度=Application.Current.MainWindow.Height;
signInUrlWindow.ShowDialog();
列表项=新列表();
items.Add(新用户信息()
{
userInfo=“abcdefg”,
imagePath=“”
});
accounts.ItemsSource=项目;
accounts.Visibility=可见性.Visibility;
AddAccount.Visibility=可见性.Visibility;
AccountsTextBlock.Visibility=可见性.Visibility;
}

您是否考虑过在此处使用画布以外的面板?当你把画布和列表框放在网格的同一列和同一行时,为什么要把它们放在网格中呢?看起来你选择了一种糟糕的布局方法。无论如何,我根本不明白你为什么要在那里画画布。为什么不使用带有行和列的网格呢?为了探索这一点,我建议您首先注释掉隐藏和操纵UI大小和/或位置的所有代码。看看你得到了什么。我是wpf的新手,使用画布只是因为按钮的位置是动态的。你能推荐新的布局吗?UI布局最有用的面板可能是Grid和StackPanel。有很多wpf教程,这里有一个关于布局的教程,我认为这是一个很好的起点: