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

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

1
プレーンなPropertyMetadataではなくFrameworkPropertyMetadataまたはUIPropertyMetadataを使用する必要があるのはいつですか?
サンプル添付プロパティと動作を見ると、私はの用途の寄せ集めを見てきたFrameworkPropertyMetadata、UIPropertyMetadataとPropertyMetadata。それらはすべて継承階層を形成するので、どの方法を使用するかを選択するにはどうすればよいですか?

4
Dispatcher.Invokeを使用して、非メインスレッドからWPFコントロールを変更します
最近、WPFでプログラミングを開始し、次の問題に遭遇しました。使い方がわかりませんDispatcher.Invoke()。私はスレッド化の経験があり、使用したばかりのいくつかの簡単なWindowsフォームプログラムを作成しました。 Control.CheckForIllegalCrossThreadCalls = false; はい、私はそれがかなり不十分であることを知っていますが、これらは単純な監視アプリケーションでした。 実際には、バックグラウンドでデータを取得するWPFアプリケーションを作成しています。新しいスレッドを開始して、(Webサーバーから)データを取得するための呼び出しを行います。次に、WPFフォームに表示します。問題は、このスレッドからコントロールを設定できないということです。ラベルも何もありません。これはどのように解決できますか? コメントへの回答: @Jalfp: データを取得するときに、「新しいトレッド」でこのDispatcherメソッドを使用しますか?または、バックグラウンドワーカーにデータを取得させ、フィールドに配置して、このフィールドが入力されるまで待機する新しいスレッドを開始し、ディスパッチャーを呼び出して、取得したデータをコントロールに表示する必要がありますか?

3
データバインディングを使用してプロパティ値に基づいて、DataGridの行の背景を設定する方法
XAMLコードでBackgroundは、特定の1つの行のオブジェクトの値に基づいて、各行の色を設定したいと思います。私が持っているObservableCollectionのをz、とのそれぞれは、zというプロパティを持っていますState。私は私の中でこのようなものから始めましたDataGrid: <DataGrid.RowStyle> <Style TargetType="DataGridRow"> <Setter Property="Background" Value="{Binding z.StateId, Converter={StaticResource StateIdToColorConverter}}"/> </Style> </DataGrid.RowStyle> xは私のViewModelクラスのプロパティではないため、これは間違ったアプローチです。 私のViewModelクラスでは私が持ってObservableCollection<z>いるどのItemsSource本のDataGrid、およびSelectedItemタイプのをz。 色をSelectedItemにバインドすることはできますが、これはの1行のみを変更しDataGridます。 1つのプロパティに基づいて、この行の背景色を変更するにはどうすればよいですか?
81 wpf  xaml  wpfdatagrid 


3
XAMLのみを使用して単色の三角形を描画します
XAMLのみを使用して塗りつぶされた三角形を描画することは可能ですか(ソリューションの背後にあるコードではありません)? 三角形はAscending/Descending、チャートコントロールの並べ替えボタンとともに並べ替え方向を表すために、下の画像のようになっている必要があります。 編集:SpeziFishのおかげで解決策: 上昇: <Polygon Points="0,0 8,5, 0,10" Stroke="Black" Fill="Black" /> 降順: <Polygon Points="8,0 0,5, 8,10" Stroke="Black" Fill="Black" />
80 .net  wpf  xaml  draw 

2
WPFアプリの.NET Core 3.0でSystem.Windows.Formsを参照する方法
WPFデスクトップアプリを.NET FramworkからCore 3.0に移行しています。System.Windows.Forms.FolderBrowserDialog()を使用していて、この参照をCoreプロジェクトに追加する方法に行き詰まっています。"System.Windows.Forms" NuGetパッケージはありませんか?コアでFolderBrowserDialogを表示する別の方法はありますか? 更新 デフォルトのテンプレートを使用してコアプロジェクトを作成し、貼り付けた.csファイルと.xamlファイルをそのプロジェクトにコピーしました。.csprojファイルは次のようになります。 <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>netcoreapp3.0</TargetFramework> <UseWPF>true</UseWPF> </PropertyGroup>

7
C#でイベントが発生するまでコードフローをブロックする方法
ここにGridとがありButtonます。ユーザーがボタンをクリックすると、Utilityクラスのメソッドが実行され、アプリケーションがグリッドをクリックするように強制します。コードフローはここで停止し、ユーザーがをクリックするまで続行しないでくださいGrid。 私はここまでに同様の質問をしました: ユーザーがC#WPFをクリックするまで待ちます その質問では、動作するasync / awaitを使用して回答を得ましたが、これをAPIの一部として使用するので、コンシューマーは自分のメソッドを非同期は必要ありません。 Utility.PickPoint(Grid grid)この目標を達成するためのメソッドをどのように記述しますか? 私はこれを助けるかもしれないが、正直に言うとここに適用することを完全には理解していませんでした: イベントが完了するまでブロックする コンソールアプリケーションのConsole.ReadKey()メソッドのようなものと考えてください。このメソッドを呼び出すと、値を入力するまでコードフローが停止します。デバッガは、何かを入力するまで続行されません。PickPoint()メソッドの正確な動作が必要です。コードフローは、ユーザーがグリッドをクリックするまで停止します。 <Window x:Class="WpfApp1.MainWindow" 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:WpfApp1" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="3*"/> <RowDefinition Height="1*"/> </Grid.RowDefinitions> <Grid x:Name="View" Background="Green"/> <Button Grid.Row="1" Content="Pick" Click="ButtonBase_OnClick"/> </Grid> </Window> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } …

2
ドラッグ中にマウスカーソルで画像のサムネイルを表示
Imageコントロール付きのウィンドウを持つ小さなWPFアプリケーションがあります。画像コントロールは、ファイルシステムからの画像を表示します。ユーザーが画像をドラッグしてデスクトップまたは任意の場所にドロップして保存できるようにしたい。正常に動作しています。 しかし、ユーザーがドラッグしたときに、マウスカーソルと共に小さな画像のサムネイルを表示したいと思います。Windowsファイルエクスプローラーから別の場所に画像をドラッグするのと同じです。それを達成する方法は? ドラッグ/ドロップの現在の動作 望ましい行動 これが私のXAMLコードです <Grid> <Image x:Name="img" Height="100" Width="100" Margin="100,30,0,0"/> </Grid> ここにC#コードがあります public partial class MainWindow : Window { string imgPath; Point start; bool dragStart = false; public MainWindow() { InitializeComponent(); imgPath = "C:\\Pictures\\flower.jpg"; ImageSource imageSource = new BitmapImage(new Uri(imgPath)); img.Source = imageSource; window.PreviewMouseMove += Window_PreviewMouseMove; window.PreviewMouseUp += Window_PreviewMouseUp; …
8 c#  wpf  drag-and-drop 

1
なぜTask.Run()がUIスレッド/オリジンコンテキストに同期するのを待たないのですか?
非同期待ちのパターンとTask.Run動作は理解できたと思いました。 しかし、次のコード例でawait、完了したタスクから戻った後、なぜUIスレッドに同期しないのかと思います。 public async Task InitializeAsync() { Console.WriteLine($"Thread: {Thread.CurrentThread.ManagedThreadId}"); // "Thread: 1" double value = await Task.Run(() => { Console.WriteLine($"Thread: {Thread.CurrentThread.ManagedThreadId}"); // Thread: 6 // Do some CPU expensive stuff double x = 42; for (int i = 0; i < 100000000; i++) { x += i - Math.PI; } …

1
相互に依存する2つのプロパティを検証する方法は?
私は2つのプロパティを持つビューモデルを持っていますAし、B私はそれを検証しますA < B。 以下は、カスタム検証ルールを使用する簡単な実装です。各プロパティは個別に検証されるため、厄介な問題Aが発生します。入力された値が無効な場合B、の検証はBについて何も知らないため、変更後もそのままですA。 これはこのデモで見ることができます: Aを入力した後は無効です。11それ以降は正しい11 > 2です。に変更Bし22ても再評価されません。検証に合格AするAには編集する必要があります。 私が欲しいものは?赤い境界線を確認22しBた後(検証エラー)が消えA = 11, B = 22、ビューモデルのソース値になることを望みます。 新しい値がソースと同期された後、B検証でどうやって検証を強制することができますか?AB モデルを見る: public class ViewModel : INotifyPropertyChanged { int _a; public int A { get => _a; set { _a = value; OnPropertyChanged(); } } int _b; public int B { get => _b; set { …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.