タグ付けされた質問 「wpf」

Windows Presentation Foundation(WPF)は、Windowsベースのアプリケーションでユーザーインターフェイスをレンダリングするためのサブシステムです。


3
WPF MVVMなぜストレートXAMLウィンドウビューではなく、ContentControl + DataTemplateビューを使用するのですか?
なぜこれ? MainWindow.xaml: <Window x:Class="MVVMProject.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid> <ContentControl Content="{Binding}"/> </Grid> </Window> ExampleView.xamlを次のように設定します。 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:vms="clr-namespace:MVVMProject.ViewModels"> <DataTemplate DataType="{x:Type vms:ExampleVM}" > <Grid> <ActualContent/> </Grid> </DataTemplate> </ResourceDictionary> そして、次のようなウィンドウを作成します。 public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); MainWindow app = new MainWindow(); ExampleVM context = new ExampleVM(); …
83 c#  wpf  xaml  mvvm  architecture 

14
WPF:アプリケーションの中央に表示するダイアログの位置を設定するにはどうすればよいですか?
.ShowDialog();メインウィンドウの中央に表示するようになったダイアログの位置を設定する方法 。 これが私が位置を設定しようとする方法です。 private void Window_Loaded(object sender, RoutedEventArgs e) { PresentationSource source = PresentationSource.FromVisual(this); if (source != null) { Left = ?? Top = ?? } }
83 wpf  dialog 

4
新しい文字ごとにWPFTextBoxバインディングを起動しますか?
TextBoxに新しい文字が入力されるとすぐに、データバインディングを更新するにはどうすればよいですか? 私はWPFでのバインディングについて学んでいますが、今では(うまくいけば)単純な問題に悩まされています。 Pathプロパティを設定できる単純なFileListerクラスがあり、FileNamesプロパティにアクセスするとファイルのリストが表示されます。そのクラスは次のとおりです。 class FileLister:INotifyPropertyChanged { private string _path = ""; public string Path { get { return _path; } set { if (_path.Equals(value)) return; _path = value; OnPropertyChanged("Path"); OnPropertyChanged("FileNames"); } } public List<String> FileNames { get { return getListing(Path); } } private List<string> getListing(string path) { DirectoryInfo dir = …
83 c#  wpf  xaml  data-binding  textbox 

4
ワーカースレッドを介してObservableCollectionを更新するにはどうすればよいですか?
私が持っているObservableCollection<A> a_collection;コレクションは「n」の項目が含まれています。各アイテムAは次のようになります。 public class A : INotifyPropertyChanged { public ObservableCollection<B> b_subcollection; Thread m_worker; } 基本的に、これはすべてWPFリストビュー+詳細ビューコントロールに接続されておりb_subcollection、選択したアイテムのを別のリストビューに表示します(双方向バインディング、propertychangedの更新など)。 スレッドの実装を開始したときに、問題が発生しました。全体的なアイデアは、a_collectionワーカースレッドを使用して「作業を行う」ことで、それぞれb_subcollectionsを更新し、GUIに結果をリアルタイムで表示させることでした。 試してみると、DispatcherスレッドだけがObservableCollectionを変更できるという例外が発生し、作業が停止しました。 誰かが問題を説明できますか、そしてそれを回避する方法はありますか?

2
デフォルト値のタイプがプロパティのタイプと一致しません
私はこのクラスを持っています public class Tooth { public string Id {get;set;} } そしてこのcustromコントロール public partial class ToothUI : UserControl { public ToothUI() { InitializeComponent(); } public Tooth Tooth { get { return (Tooth)GetValue(ToothProperty); } set { SetValue(ToothProperty, value); NombrePieza.Text = value.Id.Replace("_",String.Empty); } } public static readonly DependencyProperty ToothProperty = DependencyProperty.Register("Tooth", typeof(Tooth), typeof(ToothUI), …
83 c#  wpf  wpf-controls 

3
WPFユーザーコントロールでインポートされたリソースとローカルリソースを組み合わせる方法
共有リソースと個別リソースの両方を必要とするいくつかのWPFユーザーコントロールを作成しています。 別のリソースファイルからリソースをロードするための構文を理解しました。 <UserControl.Resources> <ResourceDictionary Source="ViewResources.xaml" /> </UserControl.Resources> ただし、これを行うと、次のようにリソースをローカルに追加することもできません。 <UserControl.Resources> <ResourceDictionary Source="ViewResources.xaml" /> <!-- Doesn't work: --> <ControlTemplate x:Key="validationTemplate"> ... </ControlTemplate> <style x:key="textBoxWithError" TargetType="{x:Type TextBox}"> ... </style> ... </UserControl.Resources> ResourceDictionary.MergedDictionariesを見てきましたが、それでは複数の外部ディクショナリをマージすることしかできず、ローカルでそれ以上のリソースを定義することはできません。 些細なことを見逃しているに違いありませんか? 言及する必要があります:私はWinFormsプロジェクトでユーザーコントロールをホストしているので、App.xamlに共有リソースを配置することは実際にはオプションではありません。
82 wpf  xaml  resources 

12
ループ中にTextBox.Textに追加すると、反復ごとにより多くのメモリが消費されるのはなぜですか?
短い質問 180,000回実行されるループがあります。各反復の終わりに、リアルタイムで更新されるTextBoxに結果を追加することになっています。 を使用するMyTextBox.Text += someValueと、アプリケーションが大量のメモリを消費し、数千レコード後に使用可能なメモリが不足します。 TextBox.Text180,000回にテキストを追加するより効率的な方法はありますか? 編集私はこの特定のケースの結果を本当に気にしませんが、なぜこれがメモリを大量に消費しているように見えるのか、そしてテキストボックスにテキストを追加するより効率的な方法があるかどうかを知りたいです。 長い(元の)質問 CSVファイルのID番号のリストを読み取り、それぞれのPDFレポートを生成する小さなアプリがあります。各pdfファイルが生成された後、ResultsTextBox.Text処理され、正常に処理されたレポートのID番号が追加されます。プロセスはバックグラウンドスレッドで実行されるため、アイテムが処理されると、ResultsTextBoxがリアルタイムで更新されます。 現在、180,000のID番号に対してアプリを実行していますが、アプリケーションが使用しているメモリは、時間の経過とともに指数関数的に増加しています。開始時は約90Kですが、約3000レコードで約250 MBを占有し、4000レコードでアプリケーションが約500MBのメモリを占有します。 Results TextBoxの更新をコメントアウトすると、メモリは約90Kで比較的静止したままなので、書き込みResultsText.Text += someValueがメモリを消費する原因であると推測できます。 私の質問は、これはなぜですか?メモリを消費しないTextBox.Textにデータを追加するためのより良い方法は何ですか? 私のコードは次のようになります: try { report.SetParameterValue("Id", id); report.ExportToDisk(ExportFormatType.PortableDocFormat, string.Format(@"{0}\{1}.pdf", new object[] { outputLocation, id})); // ResultsText.Text += string.Format("Exported {0}\r\n", id); } catch (Exception ex) { ErrorsText.Text += string.Format("Failed to export {0}: {1}\r\n", new object[] { id, …
82 c#  wpf 

4
WPF-静的アイテムをコンボボックスに追加します
前にも言いましたが、もう一度言いますが、WPFの最も簡単な例は、Web上で見つけるのも最も難しいです:) 表示する必要のあるコンボボックスがありますが、データバインドなどの必要はありません。コンテンツは静的です。XAMLを使用して、アイテムの静的リストをコンボボックスに追加するにはどうすればよいですか?
82 wpf  combobox 

6
メインウィンドウを閉じてもWPFアプリがシャットダウンしない
Visual StudioでのWinFormsプログラミングに慣れていますが、WPFを試してみたかったのです。 Window01という別のウィンドウをプロジェクトに追加しました。メインウィンドウはMainWindowと呼ばれます。public MainWindow()コンストラクターの前に、Window01を宣言します。 Window01 w1; ここで、このウィンドウを次の場所でインスタンス化します。 private void Window_Loaded(object sender, RoutedEventArgs e) { w1 = new Window01(); } ウィンドウが表示されるボタンがあります:w1.ShowDialog();。 ここでの「面白い」ことは、アプリケーションを(デバッグを使用して)開始し、数秒後に終了した場合(アプリケーションで何もしなかった場合)、VisualStudioはアプリケーションがそうであるかのようにデバッグを停止しないという事実です。まだ実行されています。 行w1 = new Window01();をボタンクリックメソッドに移動すると、つまりすぐ上でShowDialog()、Visual Studioは正常に動作しています。つまり、アプリケーションを終了するとデバッグが停止します。 なぜこの奇妙な行動?

3
コードでWPFラベルのStyleプロパティを設定しますか?
App.xamlには、次のコードがあります。 <Application.Resources> <Style x:Key="LabelTemplate" TargetType="{x:Type Label}"> <Setter Property="Height" Value="53" /> <Setter Property="Width" Value="130" /> <Setter Property="HorizontalAlignment" Value="Left" /> <Setter Property="Margin" Value="99,71,0,0" /> <Setter Property="VerticalAlignment" Value= "Top" /> <Setter Property="Foreground" Value="#FFE75959" /> <Setter Property="FontFamily" Value="Calibri" /> <Setter Property="FontSize" Value="40" /> </Style> </Application.Resources> これは、私のラベルに一般的なテンプレートを提供することを目的としています。 メインのXAMLコードには、次のコード行があります。 <Label Content="Movies" Style="{StaticResource LabelTemplate}" Name="label1" /> ただし、コードを使用してStyleプロパティを初期化したいと思います。私が試してみました: …
82 c#  wpf  user-interface  label 

3
C#コードでDataTemplateを構築するにはどうすればよいですか?
WinForm相互運用機能のドロップダウンリストを作成しようとしていますが、コードでドロップダウンを作成しています。ただし、指定したDataTemplateに基づいてデータをバインドするのに問題があります。 何が足りないのですか? drpCreditCardNumberWpf = new ComboBox(); DataTemplate cardLayout = new DataTemplate {DataType = typeof (CreditCardPayment)}; StackPanel sp = new StackPanel { Orientation = System.Windows.Controls.Orientation.Vertical }; TextBlock cardHolder = new TextBlock {ToolTip = "Card Holder Name"}; cardHolder.SetBinding(TextBlock.TextProperty, "BillToName"); sp.Children.Add(cardHolder); TextBlock cardNumber = new TextBlock {ToolTip = "Credit Card Number"}; cardNumber.SetBinding(TextBlock.TextProperty, "SafeNumber"); …
82 c#  wpf  datatemplate 


5
Dispatcher.BeginInvoke:ラムダをSystem.Delegateに変換できません
電話をかけようとしていますSystem.Windows.Threading.Dispatcher.BeginInvoke。メソッドのシグネチャは次のとおりです。 BeginInvoke(Delegate method, params object[] args) デリゲートを作成する代わりに、ラムダを渡そうとしています。 _dispatcher.BeginInvoke((sender) => { DoSomething(); }, new object[] { this } ); コンパイラエラーが発生し、 ラムダをSystem.Delegateに変換できません。 デリゲートの署名は、オブジェクトをパラメーターとして受け取り、voidを返します。私のラムダはこれと一致しますが、機能していません。何が足りないのですか?

2
リストにない値にバインドされた編集可能なComboBox
常に優先アイテムがドロップダウンリストにあるとは限らない編集可能なコンボボックスがあります。 SelectedValueにバインドされた文字列に伝播されるテキストボックスにテキストを手動で入力できるようにしたいと思います。 現在、SelectedValueにバインドされた文字列は、入力された値がComboBoxアイテムの値の1つである場合にのみ更新されます。 ComboBoxリストで使用できないカスタム値を手動で入力し、バインドされた値に適切に伝播できるようにするにはどうすればよいですか?
81 .net  wpf  combobox  editing 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.