私は4つのTabItemを含むTabControlでWPFアプリケーション(UI)を作成しています。 My Application - User Tabから、私は何らかの形で(チェックボックスや他の方法で)多分、GridColumnsのどれがUserタブに表示されるかを選択したいと思います。私は他のタブで作業することができますが、時には、ユーザが必要とする特定の出力だけで作業する機会をユーザに与える必要があります。どうすればこの作品を作れますか?私はC#とwpfを初めて使っているので、単純な解答を説明してコードを提供できるなら、私はそれを説得します。いくつかのタブからグリッド列を選択し、別のタブに表示する方法は?
1
A
答えて
0
あなたの質問に答える前に、あなたに簡単なヒントを教えてください:あなたが質問したときにコードを投稿してください。そうでないと、誰かがあなたを助けるために時間を費やすことになりません。あなたのアプリケーションを実装するための
あなたが考慮する必要があります。- ElementName data binding
- のElementNameデータはあなたがこれを読むことができるポイント数2を解決するために
ColumnDefinitions
プロパティ
で作業することはできません結合非常に興味深いarticle by Josh Smith。
Pratically彼は、添付プロパティとElementSpyの特別な種類を作成します。
public class ElementSpy : Freezable
{
private DependencyObject element;
public static ElementSpy GetNameScopeSource(DependencyObject obj)
{
return (ElementSpy)obj.GetValue(NameScopeSourceProperty);
}
public static void SetNameScopeSource(DependencyObject obj, ElementSpy value)
{
obj.SetValue(NameScopeSourceProperty, value);
}
public static readonly DependencyProperty NameScopeSourceProperty =
DependencyProperty.RegisterAttached("NameScopeSource", typeof(ElementSpy), typeof(ElementSpy),
new UIPropertyMetadata(null, OnNameScopeSourceProperty));
private static void OnNameScopeSourceProperty(DependencyObject d, DependencyPropertyChangedEventArgs args)
{
INameScope nameScope;
ElementSpy elementSpy = args.NewValue as ElementSpy;
if (elementSpy != null && elementSpy.Element != null)
{
nameScope = NameScope.GetNameScope(elementSpy.Element);
if (nameScope != null)
{
d.Dispatcher.BeginInvoke(new Action<DependencyObject, INameScope>(SetScope),
System.Windows.Threading.DispatcherPriority.Normal,
d, nameScope);
}
}
}
private static void SetScope(DependencyObject d, INameScope nameScope)
{
NameScope.SetNameScope(d, nameScope);
}
public DependencyObject Element
{
get
{
if (element == null)
{
PropertyInfo propertyInfo = typeof(Freezable).GetProperty("InheritanceContext",
BindingFlags.NonPublic | BindingFlags.Instance);
element = propertyInfo.GetValue(this, null) as DependencyObject;
if (element != null)
{
Freeze();
}
}
return element;
}
}
protected override Freezable CreateInstanceCore()
{
return new ElementSpy();
}
}
は、今、私たちは私たちのコードを完了するために私たちのXAMLで
<Window.Resources>
<local:BooleanWidthConverter x:Key="BooleanWidthConverter" />
<local:ElementSpy x:Key="ElementSpy" />
</Window.Resources>
<StackPanel HorizontalAlignment="Stretch">
<Grid local:ElementSpy.NameScopeSource="{StaticResource ElementSpy}"
Margin="0,0,0,30">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding ElementName=cb1, Path=IsChecked, Converter={StaticResource BooleanWidthConverter}, Mode=OneWay}" />
<ColumnDefinition Width="{Binding ElementName=cb2, Path=IsChecked, Converter={StaticResource BooleanWidthConverter}, Mode=OneWay}" />
<ColumnDefinition Width="{Binding ElementName=cb3, Path=IsChecked, Converter={StaticResource BooleanWidthConverter}, Mode=OneWay}" />
</Grid.ColumnDefinitions>
<TextBlock HorizontalAlignment="Center" Text="Column 1" Margin="4" Grid.Column="0" />
<TextBlock HorizontalAlignment="Center" Text="Column 2" Margin="4" Grid.Column="1" />
<TextBlock HorizontalAlignment="Center" Text="Column 3" Margin="4" Grid.Column="2" />
</Grid>
<CheckBox x:Name="cb1" Content="Column 1" Margin="4" IsChecked="true" HorizontalAlignment="Center" />
<CheckBox x:Name="cb2" Content="Column 2" Margin="4" IsChecked="true" HorizontalAlignment="Center" />
<CheckBox x:Name="cb3" Content="Column 3" Margin="4" IsChecked="true" HorizontalAlignment="Center" />
</StackPanel>
をバインディングを使用することができ、我々は、単純なコンバータが必要になります。
public class BooleanWidthConverter : IValueConverter
{
private static GridLength star = new GridLength(1, GridUnitType.Star);
private static GridLength zero = new GridLength(0, GridUnitType.Pixel);
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
bool boolValue = (bool)value;
return boolValue ? star : zero;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
もちろんこれはサンプルのプロトタイプですが、私は確信していますそれはあなたのアプリケーションであなたを助けることができます。
関連する問題
- 1. 1つのタブから別のタブでアクティビティを開く方法
- 2. jQueryのタブ - 現在のタブを別のナビゲーションからハイライト表示
- 3. 一部の非表示タブ(jQuery)で選択したタブのインデックス
- 4. 列全体からデータを選択し、選択タグに別の選択肢として表示する方法。
- 5. 子フラグメントから次のタブを選択する方法
- 6. リストビューから次のタブに選択した項目を表示します。android
- 7. LWUIT 1.5タブクリックイベントをキャプチャし、サーバーからコンテンツを取り出し、選択したタブに表示する方法は?
- 8. phpのタブパネルのあるタブから別のタブに移動する方法は?
- 9. 選択タグの新しいタブを開く方法
- 10. TabCointainer(AjaxToolKit)からタブを選択する方法
- 11. 1つのタブのGoogleシートから別のタブに値をコピー
- 12. AvalonDockでタブを選択する方法
- 13. JavaFX-タブコンテンツエリアを非表示にし、特定のタブの選択時にタブヘッダーのみを表示する方法
- 14. ボタンからの角度選択Selectタブ
- 15. 別のViewPagerから単一のアクティビティボタンにアクセスする方法フラグメント現在選択されているタブは
- 16. タブ入力が選択されていないときに入力タブ選択をトリガする方法は?
- 17. 別のタブのリスト項目をクリックするときにタブを選択する
- 18. 新しいタブで剣道グリッドのハイパーリンク列を開くには?
- 19. jQueryタブの選択時にURLハッシュを正しく更新する方法は?
- 20. 角2 - 非常に奇妙な動作 - 別のタブから1つのタブに表示される変更
- 21. jQuery Mobileタブ - タブ選択イベント
- 22. ブラックベリーの1つのタブ(ペインマネージャーモデル)から別のタブにナビゲートするにはどうすればいいですか?
- 23. アクティブ/選択したタブの色を変更する方法は?
- 24. 剣道グリッドをタブストリップの別の剣道タブに表示するにはどうすればよいですか?
- 25. xamlのグリッドの選択/非選択状態を表示する方法は?
- 26. 選択したタブは内部に表示されません
- 27. TabLayoutを使用するときに、いくつかのタブを選択しないようにするには?
- 28. ギャラリーから画像を選択し、別のアクティビティアンドロイドで表示する方法は?
- 29. iphone dev:選択したタブ項目の選択解除(または非表示)
- 30. マテリアライズCSSSタブ - 4つ以上のタブを表示しない