FrameworkElement.SizeChanged event not raised when resizing control with changing zoom level
I have a wpf user control, and I listen to the FrameworkElement.SizeChanged event. In OnSizeChanged I need to recalculate zoom and apply back on the control.
The overall task is to scale the content inside the user control when the control is resized.
public class PictureDisplay: Control
{
public PictureDisplay()
{
SizeChanged += OnSizeChanged;
}
private void OnSizeChanged(object sender, SizeChangedEventArgs e)
{
//Recalculate zoomValue with new control dimensions
if(zoomvalue changes)
ApplyZoom(zoomValue);
}
private ApplyZoom(double zoomValue)
{
ScaleTransform tf = (ScaleTransform)dc._image.LayoutTransform;
tf.ScaleX = zoomValue;
tf.ScaleY = zoomValue;
}
}
All resize operations need not result in a new zoomValue. Suppose I resized along the X-axis with a minimal offset, and let's say my custom calculation of zoomValue doesnt create a new zoomValue, I am able to resize the user control on UI and receive SizeChanged events.
But when resizing results in the creation of a new zoomvalue, and as soon as I apply the new zoomValue on the UI, then I am not able to resize the control on the UI and I no longer receive SizeChanged events. Though I drag the mouse to resize, it doesnt. If I release the mouse and do again I see the same behavior.
So, in one stretch of mouse operation sequence, upon new zoom level getting applied to the control, I cant resize the control further. If I release the mouse and try to resize I am able to, but only till newer zoom gets applied. With changing zoom levels of the content I am unable to drag and resize in a go. If I disable ApplyZoom function I can resize the control as expected.
This gives me a feeling the resize of the control itself is not working when the scale factor is modified.
What needs to be done to continuously/smoothly resize the control and render the content with updated scale factor?
c# wpf wpf-controls routed-events
add a comment |
I have a wpf user control, and I listen to the FrameworkElement.SizeChanged event. In OnSizeChanged I need to recalculate zoom and apply back on the control.
The overall task is to scale the content inside the user control when the control is resized.
public class PictureDisplay: Control
{
public PictureDisplay()
{
SizeChanged += OnSizeChanged;
}
private void OnSizeChanged(object sender, SizeChangedEventArgs e)
{
//Recalculate zoomValue with new control dimensions
if(zoomvalue changes)
ApplyZoom(zoomValue);
}
private ApplyZoom(double zoomValue)
{
ScaleTransform tf = (ScaleTransform)dc._image.LayoutTransform;
tf.ScaleX = zoomValue;
tf.ScaleY = zoomValue;
}
}
All resize operations need not result in a new zoomValue. Suppose I resized along the X-axis with a minimal offset, and let's say my custom calculation of zoomValue doesnt create a new zoomValue, I am able to resize the user control on UI and receive SizeChanged events.
But when resizing results in the creation of a new zoomvalue, and as soon as I apply the new zoomValue on the UI, then I am not able to resize the control on the UI and I no longer receive SizeChanged events. Though I drag the mouse to resize, it doesnt. If I release the mouse and do again I see the same behavior.
So, in one stretch of mouse operation sequence, upon new zoom level getting applied to the control, I cant resize the control further. If I release the mouse and try to resize I am able to, but only till newer zoom gets applied. With changing zoom levels of the content I am unable to drag and resize in a go. If I disable ApplyZoom function I can resize the control as expected.
This gives me a feeling the resize of the control itself is not working when the scale factor is modified.
What needs to be done to continuously/smoothly resize the control and render the content with updated scale factor?
c# wpf wpf-controls routed-events
add a comment |
I have a wpf user control, and I listen to the FrameworkElement.SizeChanged event. In OnSizeChanged I need to recalculate zoom and apply back on the control.
The overall task is to scale the content inside the user control when the control is resized.
public class PictureDisplay: Control
{
public PictureDisplay()
{
SizeChanged += OnSizeChanged;
}
private void OnSizeChanged(object sender, SizeChangedEventArgs e)
{
//Recalculate zoomValue with new control dimensions
if(zoomvalue changes)
ApplyZoom(zoomValue);
}
private ApplyZoom(double zoomValue)
{
ScaleTransform tf = (ScaleTransform)dc._image.LayoutTransform;
tf.ScaleX = zoomValue;
tf.ScaleY = zoomValue;
}
}
All resize operations need not result in a new zoomValue. Suppose I resized along the X-axis with a minimal offset, and let's say my custom calculation of zoomValue doesnt create a new zoomValue, I am able to resize the user control on UI and receive SizeChanged events.
But when resizing results in the creation of a new zoomvalue, and as soon as I apply the new zoomValue on the UI, then I am not able to resize the control on the UI and I no longer receive SizeChanged events. Though I drag the mouse to resize, it doesnt. If I release the mouse and do again I see the same behavior.
So, in one stretch of mouse operation sequence, upon new zoom level getting applied to the control, I cant resize the control further. If I release the mouse and try to resize I am able to, but only till newer zoom gets applied. With changing zoom levels of the content I am unable to drag and resize in a go. If I disable ApplyZoom function I can resize the control as expected.
This gives me a feeling the resize of the control itself is not working when the scale factor is modified.
What needs to be done to continuously/smoothly resize the control and render the content with updated scale factor?
c# wpf wpf-controls routed-events
I have a wpf user control, and I listen to the FrameworkElement.SizeChanged event. In OnSizeChanged I need to recalculate zoom and apply back on the control.
The overall task is to scale the content inside the user control when the control is resized.
public class PictureDisplay: Control
{
public PictureDisplay()
{
SizeChanged += OnSizeChanged;
}
private void OnSizeChanged(object sender, SizeChangedEventArgs e)
{
//Recalculate zoomValue with new control dimensions
if(zoomvalue changes)
ApplyZoom(zoomValue);
}
private ApplyZoom(double zoomValue)
{
ScaleTransform tf = (ScaleTransform)dc._image.LayoutTransform;
tf.ScaleX = zoomValue;
tf.ScaleY = zoomValue;
}
}
All resize operations need not result in a new zoomValue. Suppose I resized along the X-axis with a minimal offset, and let's say my custom calculation of zoomValue doesnt create a new zoomValue, I am able to resize the user control on UI and receive SizeChanged events.
But when resizing results in the creation of a new zoomvalue, and as soon as I apply the new zoomValue on the UI, then I am not able to resize the control on the UI and I no longer receive SizeChanged events. Though I drag the mouse to resize, it doesnt. If I release the mouse and do again I see the same behavior.
So, in one stretch of mouse operation sequence, upon new zoom level getting applied to the control, I cant resize the control further. If I release the mouse and try to resize I am able to, but only till newer zoom gets applied. With changing zoom levels of the content I am unable to drag and resize in a go. If I disable ApplyZoom function I can resize the control as expected.
This gives me a feeling the resize of the control itself is not working when the scale factor is modified.
What needs to be done to continuously/smoothly resize the control and render the content with updated scale factor?
c# wpf wpf-controls routed-events
c# wpf wpf-controls routed-events
asked Nov 14 '18 at 11:12
JogaJoga
9518
9518
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53298889%2fframeworkelement-sizechanged-event-not-raised-when-resizing-control-with-changin%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53298889%2fframeworkelement-sizechanged-event-not-raised-when-resizing-control-with-changin%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown