2017-02-23 7 views
1

ウィンドウにコントロールコンテンツを表示する方法についてWPFチュートリアルhereに従っていますが、意図したとおりにローカルコントロールを表示できません。ローカルコントロールのコンストラクタが呼び出されていますが、コントロールが表示されません。

はここに私のMainWindow.xamlコード

<Window x:Class="McXamlLib.MainWindow" 
     x:Name="Window" 

     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" 
     xmlns:local="clr-namespace:McXamlLib" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="565" Width="310"> 

    <Grid x:Name="LayoutRoot"> 
     <local:XAMLFileBrowser /> 
    </Grid> 
</Window> 

namespace McXamlLib 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 
    } 
} 

だとここで私のローカル制御(XamlFileBrowser.xaml)コード

<UserControl x:Class="McXamlLib.XAMLFileBrowser" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:McXamlLib" 
      mc:Ignorable="d" 

      x:Name="XAMLFileBrowserControl" 
      d:DesignHeight="39" d:DesignWidth="397"> 


    <Grid x:Name="LayoutRoot" Height="42" Width="504"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="0.352"></ColumnDefinition> 
      <ColumnDefinition Width="0.648"></ColumnDefinition> 
     </Grid.ColumnDefinitions> 
     <TextBox x:Name="FBCTextBox" Margin="4,10.313,137, 4.001" Text ="TextBox" 
        TextWrapping="Wrap" Grid.ColumnSpan="2" TextChanged="FCTextBox_TextChanged" /> 

     <Button x:Name="FBCButton" HorizontalAlignment="Right" Margin="0,8,13,4" Width="111" Content="Browse" Grid.Column="1" 
       Click="FBCButton_Click" /> 


    </Grid> 
</UserControl> 
namespace McXamlLib 
{ 
    /// <summary> 
    /// Interaction logic for UserControl1.xaml 
    /// </summary> 
    public partial class XAMLFileBrowser : UserControl 
    { 
     public XAMLFileBrowser() 
     { 
      InitializeComponent(); 
      var nameTextBox = FBCTextBox.Name; 
     } 


     public string FileName 
     { 
      get { return FBCTextBox.Text; } 
      set { FBCTextBox.Text = value; } 
     } 

     public event EventHandler<EventArgs> FileNameChanged; 

     private void FCTextBox_TextChanged(object sender, TextChangedEventArgs e) 
     { 
      e.Handled = true; 
      if (FileNameChanged != null) 
       FileNameChanged(this, EventArgs.Empty); 
     } 

     private void FBCButton_Click(object sender, RoutedEventArgs e) 
     { 
      Microsoft.Win32.OpenFileDialog openFileDlg = new Microsoft.Win32.OpenFileDialog(); 
      if (openFileDlg.ShowDialog() == true) 
       this.FileName = openFileDlg.FileName; 
     } 
    } 
} 

私はpublic XAMLFileBrowser()コンストラクタクラスに侵入し、nameTextBoxの値をチェックすることができます、しかし、私はちょうどそれが表示するようにコントロールを得ることができません:

enter image description here

代わりに、私は空のMainWindow画面を持っています。

何らかの理由がありますか?

+0

正確な問題は、MainWindowがローカル:XAMLFileBrowserコントロールをロードしていないことです。それとも、コンテンツが正しく読み込まれていないのですか? –

+0

@NahuelIanni、私は分かりません - 私は空白のMainWindow UI – Graviton

答えて

1

カラムの幅はピクセルに設定されているため、実際には小さなスペースを占めます。

あなたは私があなたの意図だったと仮定した、割合にそれを変更した場合、それは正しく示しています

<ColumnDefinition Width="0.3*"></ColumnDefinition> 
<ColumnDefinition Width="0.7*"></ColumnDefinition> 

enter image description here

あなたはXAMLでどのように機能するかを、比例単位やレイアウトにthis MSDN articleを確認することができます。

1

XAMLFileBrowserのグリッドの列を1ピクセル下に設定すると、そのグリッド(テキストボックスとボタン)のすべてが1ピクセル下に折りたたまれて表示されなくなります。 開始するには、Widthの値を完全に削除すると、コントロールが表示されます。あなたが望むものが得られるまで調整してください。

関連する問題