<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Views="clr-namespace:LWA.NP.Controls.Views">
<Style TargetType="{x:Type Views:New_Project_View}">
<Setter Property="Width" Value="200"/>
<Setter Property="Height" Value="200"/>
<Setter Property="MinWidth" Value="100"/>
<Setter Property="MinHeight" Value="100"/>
<Setter Property="MaxWidth" Value="400"/>
<Setter Property="MaxHeight" Value="400"/>
<Setter Property="Background" Value="#181818"/>
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="FlowDirection" Value="LeftToRight"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Views:New_Project_View}">
<Border Background="{TemplateBinding Background}">
<TextBlock Text="New Project" Foreground="{TemplateBinding Foreground}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
안녕하세요. 혼자서 WPF를 독학 및 개발하고 있는 학생입니다.
Prism 라이브러리에서 제공하는 IDialogService 인터페이스를 사용하여 다이어그램을 띄운 데까지는 성공했습니다.
하지만 최소, 최대 크기를 할당했는데도 기대했던 동작과 달리 마치 최소, 최대 크기를 할당을 안 한 거처럼 끝까지 축소 및 확대가 됩니다.
제가 생각할 수 있는 시나리오는 ContentControl 를 상속받은 컨트롤은 최소, 최대 크기가 동작하지 않는다는 시나리오라고 생각이 듭니다.
독학으로 배운지라 용어가 애매한 점 양해 부탁드립니다.
1개의 좋아요
안녕하세요, 저도 Prism을 사용해서 개발중입니다.
처음에 Prism을 뚫으며 제가 느낀…고통들을 맛보고 계신것 같네요 ㅋㅋㅋㅋ
정확하게 알고있는건 아니지만 Prism에서 IDialogService를 통해서 Dialog를 Show하게되면 UserControl을 Window위에 올려서 Dialog를 구현한것으로 보입니다. 그렇기 때문에 UserControl 자체를 MaxWidth, MaxHeight를 걸어도 Window 자체가 늘어나 소용이 없게 됩니다.

아래처럼 Dialog.WindowStyle을 통해 해당 UserControl의 Window를 제어 할 수 있습니다.
<prism:Dialog.WindowStyle>
<Style TargetType="Window">
<Setter Property="MaxHeight" Value="500"/>
<Setter Property="MaxWidth" Value="500"/>
</Style>
</prism:Dialog.WindowStyle>
추가로 containerRegistry.RegisterDialogWindow()를 사용하면 모든 Dialog의 Window를 통일 시킬 수 있어 편리합니다.
3개의 좋아요
감사합니다. 덕분에 적은 시간으로 문제를 해결했습니다. ResourceDictionary 요소 내에서는 WindowStyle 연결할 수 없다고 해서 추가로 말씀해 주신 RegisterDialogWindow를 사용하여 설정해야 할 거 같습니다. 아니면 다른 방법이 있으시면 답변 부탁드리겠습니다.
1개의 좋아요
ResourceDictionary는 아래처럼 따로 작성 해주셔야 합니다.
이렇게 했는데도 안된다는 말씀이실까요??
<prism:Dialog.WindowStyle>
<Style TargetType="Window">
<Setter Property="prism:Dialog.WindowStartupLocation" Value="CenterScreen" />
<Setter Property="ResizeMode" Value="NoResize"/>
<Setter Property="ShowInTaskbar" Value="False"/>
<Setter Property="SizeToContent" Value="WidthAndHeight"/>
<Setter Property="WindowStyle" Value="ToolWindow"/>
</Style>
</prism:Dialog.WindowStyle>
<UserControl.Resources>
<ResourceDictionary>
<converter: ~~ />
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source = "~~"/>
<ResourceDictionary Source = "~~"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
1개의 좋아요
using System.Windows;
using LWA.Forms.Controls.Views;
using LWA.Library.Controls;
namespace LWA.NP.Controls.Views
{
public class New_Project_View : Library_Content
{
static New_Project_View()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(New_Project_View), new FrameworkPropertyMetadata(typeof(New_Project_View)));
}
}
}
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Default="clr-namespace:LWA.Forms.Controls.Views;assembly=LWA.Forms"
xmlns:Views="clr-namespace:LWA.NP.Controls.Views"
xmlns:prism="http://prismlibrary.com/"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">
<Style TargetType="{x:Type Views:New_Project_View}">
<Setter Property="d:DesignWidth" Value="800"/>
<Setter Property="d:DesignHeight" Value="600"/>
<Setter Property="prism:Dialog.WindowStyle">
<Setter.Value>
<Style TargetType="Window">
<Setter Property="MaxWidth" Value="1000"/>
<Setter Property="MaxWidth" Value="1000"/>
</Style>
</Setter.Value>
</Setter>
<Setter Property="Content">
<Setter.Value>
<Grid>
<TextBlock Text="AAA" Foreground="White"/>
</Grid>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
저는 이런 식으로 컨트롤을 만들었는데 DesignWidth와 DesignHeight는 xaml(ResourceDictionary ) 파일 내에서는 설정을 못 하는 거 같습니다.
| 심각도 |
코드 |
설명 |
프로젝트 |
파일 |
줄 |
비표시 오류(Suppression) 상태 |
| 오류(활성) |
MC4005 |
‘LWA.NP.Controls.Views.New_Project_View’ 형식에서 Style Property 'DesignWidth’을(를) 찾을 수 없습니다. 줄 11 위치 17. |
LWA.NP |
D:\Little World Audience\LWA.Application\LWA.NP\Themes\Views\New_Project_View.xaml |
11 |
|
그래서 New_Project_View 클래스 내에서 따로 설정해야 할 거 같다는 생각이 들긴 합니다. 그러면
<Style TargetType="Window">
<Setter Property="MaxWidth" Value="1000"/>
<Setter Property="MaxWidth" Value="1000"/>
</Style>
이 부분의 코드도 xaml 파일이 아닌 New_Project_View 클래스 내에서 따로 설정해야 궁금합니다. 아니면 제 가설 자체가 잘못된 걸까요?
죄송하지만 제가 클래스로 view를 만들어본적은 없어서 잘 모르겠습니다 .ㅎㅎ
말씀해주신대로 ResourceDictionary에서는 prism:DialogWindow제어가 안되네요
아래처럼 해봣는데 동작하지 않습니다.
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:prism="http://prismlibrary.com/">
<Style TargetType="TextBlock">
<Setter Property="Background" Value="Wheat"/>
</Style>
<Style TargetType="prism:DialogWindow">
<Setter Property="MaxHeight" Value="300"/>
<Setter Property="MaxWidth" Value="300"/>
</Style>
</ResourceDictionary>
클래스 내라고 표현해주신게 xaml.cs 부분을 말씀해주신걸까요?
그렇게 사용해본적은 없으나 Prism의 특수성을 따지면 쉽지는 않을거같습니다.
1개의 좋아요
일단 클래스 내라는 건 New_Project_View 클래스를 말하는 겁니다.
그래도 어떻게 해야 IDialogService를 통해 Show 하게된 컨트롤을 어떤 식으로 Max, Min 크기를 설정할 수 있는지 알게 되었으니 나머지 부가적인 문제는 따로 해결해 보도록 하겠습니다. 좋은 답변 해주셔서 감사합니다.