C#/WPF

StaticResourceHolder 값 제공 예외 throw

최뭉뭉 2022. 2. 14. 15:13

분명히 똑같이 짠 다른 코드는 잘 돌았는데 갑자기 리소스를 찾을 수 없다고 나오는 나쁜 예외....

이유가 뭘지 며칠동안 고민했는데 정말 별거 아닌 이유였네요

 

<Style x:Key="GeneralGrid" TargetType="{x:Type Grid}">
      <Style.Resources>
            <Style BasedOn="{StaticResource CommonDataGrid}" TargetType="DataGrid" />
       </Style.Resources>
</Style>

해당 코드에서 발생한 예외였는데요

간단하게 설명하자면 특정 Grid 스타일 내에서만 사용하고 싶은 DataGrid 스타일이 있어서 작성한 코드입니다

위 코드처럼 작성하시면 GeneralGrid 스타일을 적용한 Grid 내의 Datagrid의 스타일은 모두 CommonDataGrid 스타일이 적용됩니다.

Style.Resources를 사용하시면 특정 스타일 내에서 다른 컨트롤들의 UI도 쉽게 설정하실 수 있습니다.

 

버젓이 존재하고 있는 'CommonDataGrid' 스타일이 자꾸 찾을 수 없다고 나와서 정말정말 이해가 안 됐습니다

도대체 ... 왜 찾을 수 없니? 내 눈엔 잘만 보이는데...

StaticResource가 잘못된 걸까 해서 DynamicResource로 변경해보고 별 쇼를 다했는데도 안 되더라구요 ...

 

 

팀 형에게 헬프를 쳤더니 팀 형아가 말합니다

"CommonDataGrid 스타일이 GeneralGrid 스타일보다 밑에 있어서 그런거 아냐?"

나 : !?!!?

 

바로 적용해봤더니 아주 잘 되는군요...

스타일은 순서도 중요한가 봅니다 ㅋㅋㅋㅋㅋㅋ 

스타일 내에서 다른 스타일 참조하실때 참고하시면 좋을 것 같아요

 

 

<예외가 뜨는 코드>

<Style x:Key="GeneralGrid" TargetType="{x:Type Grid}">
        <Style.Resources>
            <Style BasedOn="{StaticResource CommonDataGrid}" TargetType="DataGrid" />
        </Style.Resources>
</Style>
<Style x:Key="CommonDataGrid" TargetType="{x:Type DataGrid}">
~~~~~~~~
</Style>

 

<잘 실행되는 코드>

<Style x:Key="CommonDataGrid" TargetType="{x:Type DataGrid}">
~~~~~~~~
</Style>
<Style x:Key="GeneralGrid" TargetType="{x:Type Grid}">
        <Style.Resources>
            <Style BasedOn="{StaticResource CommonDataGrid}" TargetType="DataGrid" />
        </Style.Resources>
</Style>

 

 

 

아직 모르는 부분이 많아 위 내용에 잘못된 점이 있다면 댓글로 피드백 달아주세요!

참고해서 적극적으로 수정하겠습니다. 감사합니다.