Xaml style 설정에서 참조에 무한루프 발생

안녕하세요 xaml 개발을 하다가 resource dictionary를 작성하고 있는데
XDG0066 이름이 'SearchBox'인 'System.Windows.Controls.TextBox' 형식의 요소에 대한 Template을 처리하는 동안 참조에서 무한 루프를 발견했습니다.
오류를 접했는데 해결방법이 도저히 떠오르지 않네요 ㅠㅠ 혹시 아시는 분이 있을까요?
Textbox가 TargetType이고 controlTemplate에서 Textbox를 또다시 적어서 나는 오류일까요?

<Style TargetType="{x:Type TextBox}" x:Name="ModernTextbox">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TextBox}">
                <Border CornerRadius="10"
                        Background="#353340"
                        Width="200" Height="40">

                    <Grid>
                        <Rectangle StrokeThickness="1"/>
                        <TextBox Margin="1"
                                 Text="{TemplateBinding Text}"
                                 BorderThickness="0"
                                 Background="Transparent"
                                 VerticalContentAlignment="Center"
                                 Padding="5"
                                 Foreground="#CFCFCF"
                                 x:Name="SearchBox"/>

                        <TextBlock IsHitTestVisible="False"
                                   Text="Search"
                                   VerticalAlignment="Center"
                                   HorizontalAlignment="Left"
                                   Margin="10,0,0,0"
                                   FontSize="11"
                                   Foreground="DarkGray"
                                   Grid.Column="1">

                            <TextBlock.Style>
                                <Style TargetType="{x:Type TextBlock}">
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding Text, ElementName=SearchBox}" Value="">
                                            <Setter Property="Visibility" Value="Visible"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                    <Setter Property="Visibility" Value="Hidden"/>
                                </Style>
                            </TextBlock.Style>

                        </TextBlock>
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
1개의 좋아요

네 아마 맞을 겁니다. 그래서 보통 다음처럼 합니다.

<Style x:Key="CustomTextBox" TargetType="{x:Type TextBox}">
...
...
</Style>

<Style BasedOn="{StaticResource CustomTextBox}" TargetType="TextBox" />
2개의 좋아요

같은 스타일 내에서 무한 루프 오류가 발생하는데, 말씀해주신 방법을 적용해볼려고 하니 스타일 내에 TextBox에는 적용이 안되는것 같습니다ㅠ. 답변 감사합니다.

1개의 좋아요

style 정의가 많이 이상해 보입니다…

제 생각에 이 정도면 UserControl로 만드는게 좋을 것 같아요.

좀 더 덧붙이자면 UserControl로 만들어서 Style의 Template에 넣으면 될 것 같아요.

3개의 좋아요

안된다고 하셔서 @1111 님의 코드를 그대로 적용해서 테스트를 해보고 있는데 잘 되는 것으로 확인됩니다.
다른 문제가 있는 것이 아닐까요?

image

2개의 좋아요

다른 문제가 있을까 해서 코드를 싹 다 지우고 다시 진행 해봤는데 적용하고자 하는 컨트롤에 미리 staticresource 로 해당 style을 지정해놓고 resouce dictionary를 작성해서 생긴 문제같습니다.

resouce dictionary 작성 → 컨트롤 style에 적용

정석?방식으로 코드 작성을 하니 문제가 없습니다. 감사합니다. ㅎㅎ

1개의 좋아요